Day78 | 靈神 | 反轉鏈表 兩兩交換鏈表中的節點
24.兩兩交換鏈表中的節點
24. 兩兩交換鏈表中的節點 - 力扣(LeetCode)
思路:
這道題就是下面這道題的k==2的情況
25. K 個一組翻轉鏈表 - 力扣(LeetCode)
基本思路和92. 反轉鏈表 II - 力扣(LeetCode)一樣
用第一個例子[1,2,3,4,5]作為說明,就是說,步驟為
1.建立虛擬頭結點t,作為要反轉部分[1,2]的前一個節點,以后每反轉一部分都要更新和保存反轉部分的前一個節點
2.再次建立一個臨時節點q保存要反轉部分的后一個結點[3]
3.建立兩個指針指向要交換的兩個節點,cur指向2,pre指向1
4.反轉指針把2指向1
5.把反轉部分接到原來鏈表上
- 5.1 [1]的next即pre的next指向[3],即q,這是把后面接好了
- 5.2 虛擬頭結點t的next指向[2],即cur,這是把前面接好了
6.更新并保存t,把t更新為1,即pre,因為pre是下一段要反轉部分[3,4]的前一個節點
完整代碼:
class Solution {
public:ListNode* swapPairs(ListNode* head) {//1.建立虛擬頭結點ListNode * t=new ListNode;t->next=head;ListNode * res=t;while(t&&t->next&&t->next->next){//2,3步ListNode *pre=t->next;ListNode *cur=pre->next;ListNode *q=cur->next;//4cur->next=pre;//5.pre->next=q;t->next=cur;//6.t=t->next->next;}return res->next;}
};