跳至主要內容

leetcode 206. 反转链表

张威小于 1 分钟数据结构与算法链表

leetcode 206. 反转链表open in new window

**题目描述:**给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

方法一:虚拟头结点+头插法

class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        if(head == nullptr) {
            return nullptr;
        }
        ListNode* dummyHead = new ListNode(-1, head);
        ListNode* p1 = dummyHead;
        while( p1 && p1->next) {    //头插
            ListNode* temp = p1->next;
            p1->next = dummyHead->next;
            dummyHead->next = p1;
            p1 = temp;
        }
        if(p1 != nullptr) {//最后一个结点
            p1->next = dummyHead->next;
        }
        head->next = nullptr;
        return p1;

    }
};

**方法二:**类似 int temp = a; a =b; b =temp;

class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode* p1 = head;
        ListNode* p2 = nullptr; //记录反转后链表的头结点
        ListNode* temp = nullptr;   //暂存p1的下一个结点的位置
        while(p1) {
          
            temp = p1->next;
            p1->next = p2;	//翻转
            p2 = p1;
            
            p1 = temp;  
        }
        return p2;
    }
};