题目描述
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
题解:
定义两个指针分别为pre和cur,两个指针一次向下遍历,初始pre指向为nullptr,因为翻转后头结点会变成尾节点,链表结束是以nullptr结束的,因此pre为nullptr,cur指向head,反转链表后cur的下一个位置便是pre,由于在赋值时会把cur改变掉,需要使用temp来保存下一步遍历时需要的cur,两个指针同时向前移动,当前的cur又会作为下一步的pre,下一步的cur保存在了temp中,直到cur遍历到链表结束。此时pre保存的便是要求解的链表的头结点。返回pre即可。(建议画个图)
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* tmp;
ListNode* cur=head;
ListNode* pre=nullptr;
while(cur)
{
tmp=cur->next;
cur->next=pre;
pre=cur;
cur=tmp;
}
return pre;
}
};