剑指 Offer 24. 反转链表

题目描述
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
示例:
输入: 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;
    }
};
上一篇:【UE4 C++】UObject 创建、销毁、内存管理


下一篇:剑指offer26:树的子结构