反转链表

原题:

反转一个单链表。

示例:

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

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

解题方法:

解法一:

class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode* pre=nullptr;
        while(head!=nullptr)
        {
            ListNode* help=head->next;
            head->next=pre;
            pre=head;
            head=help;
        }
        return pre;
    }
};

做题小结:

这道题可以新建一个链表来进行反转,但是这样会增加额外的空间,所以其实只需要依次改变next指向的节点就好了。

这里使用到了双指针法,核心逻辑就是用一个help来保存一下head的下一个节点,然后让head的next指向pre,然后pre后移,移到head,head后移,移到之前保存的help