剑指 Offer 24. 反转链表

剑指 Offer 24. 反转链表

题目来源:LeetCode

1. 题目描述

定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。

示例:

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

限制:

0 <= 节点个数 <= 5000

2. 思考

  • 将当前节点的下一节点指向当前节点时,会丢失后续节点,例如将示例中的1->2反转为2->1时,2与3之间的连接也就会断开,此时就会丢失3以后的节点。所以最少需要3个节点变量,一个变量用于保存后续节点
  • 考虑只有一个节点或链表为空
  • 考虑只有两个节点

3. 代码

struct ListNode* reverseList(struct ListNode* head){
    struct ListNode* prev = NULL;
    struct ListNode* curr = head;
    struct ListNode* last = curr==NULL?NULL:curr->next;

    if(head == NULL) return NULL;
    
    while(last!= NULL){
        curr->next = prev;
        prev = curr;
        curr = last;
        last = last->next;
    }
    curr->next = prev;
    return curr;
}

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×