反转链表
原题:
反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL输出: 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
