zoukankan      html  css  js  c++  java
  • (leetcode)链表反转-c语言实现

    反转一个单链表。

    示例:

    输入: 1->2->3->4->5->NULL
    输出: 5->4->3->2->1->NULL

    使用迭代方法,代码如下:

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     struct ListNode *next;
     * };
     */
    struct ListNode* reverseList(struct ListNode* head){
        if (head == NULL || head->next == NULL)
            return head;
        
        struct ListNode *pre = head;
        struct ListNode *cur = head->next;
        struct ListNode *tmp = head->next->next;
        
        while(cur)
        {
            tmp = cur->next;
            cur->next = pre;
            pre = cur;
            cur = tmp;
        }
        head->next = NULL;
        
        return pre;
    
    }

    递归方法如下:

    struct ListNode* reverseList(struct ListNode* head){
        if (head == NULL || head->next == NULL)
            return head;
        else
        {
            struct ListNode *newhead = reverseList(head->next);
            head->next->next = head;
            head->next = NULL;
            return newhead;
            
        }
    }

    总结下,递归的写法,整体来看,递归可以分成两个部分,一个是,对最里层的递归进行判断,那么对于这道题,最里层的递归就是当head为空,或者head->next为空。然后写第二个部分,从最外层开始,并且假设,剩余的部分传入递归函数返回的为已经反转的链表,然后做剩余的部分。递归函数就是要注意一个头一个尾,然后中间部分由递归完成就可以了。

  • 相关阅读:
    Java ArrayList,LinkedList使用
    Vue 使用axios分片上传
    Vue 中Axios 使用
    Vue 自定义组件
    Java IO系统--RandomAccessFile
    Java IO系统--字符流
    Java String类
    静态导入(static import)
    枚举(Enum)
    Java 可变参数
  • 原文地址:https://www.cnblogs.com/xingmuxin/p/11304359.html
Copyright © 2011-2022 走看看