1. 程式人生 > >LeetCode 24. 兩兩交換連結串列中的節點(C++)

LeetCode 24. 兩兩交換連結串列中的節點(C++)

題目:

給定一個連結串列,兩兩交換其中相鄰的節點,並返回交換後的連結串列。

示例:

給定 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
; } };