力扣(LeetCode)反转链表 个人题解

反转一个单链表。

示例:

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

进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?

久违了。由于现实需要,从现在开始捡起来很久没用的C/C++来编写代码。

这一题之前做过,但是由于使用了较为生疏的语言有些细节没掌握明白。

思路比较简单,迭代的做法,假设链表:  1-> 2 -> 3 ->4 -> NULL

假设curr指针指向1,设置prev指针为NULL,当curr不为NULL时,进行循环。

1.使用局部变量 指针tmp 来保存curr->next的位置 ,此时tmp指向 2 

2.设置curr->next 为prev,即 链表变为 NULL <- 1 -> 2 -> 3 -> 4 -> NULL

3.设置prev 为 curr, 则此时 prev指向 1,新链表的头部

4.设置 curr 为 prev, curr指向2,按照原链表的顺序循环下去

代码如下:

class Solution {
public:
    ListNode* reverseList(ListNode* head) {
      if(!head) return head;
      ListNode* prev = new ListNode(NULL);
      ListNode* curr = head;
      while(curr)
      {
        ListNode* tmp = curr->next;
        curr->next = prev;
        prev = curr;
        curr = tmp;
      }
      return prev;
    }
};

猜你喜欢

转载自www.cnblogs.com/axiangcoding/p/10803953.html