反转链表


反转链表

●定义两个指针: pre和cur ; pre在前cur在后。
●每次让pre的next指向cur,实现-次局部反转
●局部反转完成之后,pre和cur同时往后移动-一个位置
●循环上述过程,直至pre到达链表尾部

class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode* cur = NULL, *pre = head;
        while (pre != NULL) {
            ListNode* t = pre->next;
            pre->next = cur;
            cur = pre;
            pre = t;
        }
        return cur;
    }
};

简洁的递归
●使用递归函数,一直递归到链表的最后-个结点,该结点就是反转后的头结点,记作ret .
●此后,每次函数在返回的过程中,让当前结点的下一个结点的next指针指向当前节点。
●同时让当前结点的next指针指向NULL,从而实现从链表尾部开始的局部反转
●当递归函数全部出栈后,链表反转完成。

class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        if (head == NULL || head->next == NULL) {
            return head;
        }
        ListNode* ret = reverseList(head->next);
        head->next->next = head;
        head->next = NULL;
        return ret;
    }
};

文章作者: anlen123
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 anlen123 !
 上一篇
课程表 课程表
207. 课程表难度中等328 你这个学期必须选修 numCourse 门课程,记为 0 到 numCourse-1 。 在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们:[0
2020-05-17 anlen123
下一篇 
560.和为K的子数组 560.和为K的子数组
560. 和为K的子数组给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。 示例 1 : 输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。说明 :
2020-05-15 anlen123
  目录