LeetCode 24. 兩兩交換連結串列中的節點(C++)
阿新 • • 發佈:2019-02-01
題目:
給定一個連結串列,兩兩交換其中相鄰的節點,並返回交換後的連結串列。
示例:
給定 1->2->3->4, 你應該返回 2->1->4->3.
說明:
- 你的演算法只能使用常數的額外空間。
- 你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。
思路:
建立虛擬頭結點(為了不對head進行特殊處理),按照如下示意圖進行節點交換。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next ;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
ListNode* dummyHead = new ListNode(0);
dummyHead->next = head;
ListNode* cur = dummyHead;
while(cur->next != NULL && cur->next->next !=NULL){
ListNode* node1 = cur->next;
ListNode* node2 = node1->next;
ListNode* rear = node2->next;
cur->next = node2;
node2->next = node1;
node1->next = rear;
cur = node1;
}
return dummyHead->next ;
}
};