LeetCode 24——兩兩交換連結串列中的節點
阿新 • • 發佈:2018-11-14
1. 題目
2. 解答
新建一個哨兵結點作為頭結點,然後每次交換相鄰兩個結點。並依次將它們連線到新連結串列中去,再將原連結串列中後面的結點也串到新連結串列後面。直至到達鏈尾或者剩餘一個節點,則此時返回新連結串列的頭結點,也即是原始連結串列的第二個結點。
/** * 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) { if (head == NULL || head->next == NULL) return head; // 沒有結點或只有一個結點 ListNode *p1 = head; ListNode *p2 = head->next; ListNode *p3 = NULL; ListNode *temp = head->next; // 交換後的頭結點為原連結串列的第二個結點 head = new ListNode(0); // 新建哨兵結點方便操作 while (1) { p3 = p2->next; p2->next = p1; // 第一步,交換結點 head->next = p2; // 第二步,連線交換後的兩個結點到新連結串列中 head = p1; // 第三步,指向新連結串列尾結點 head->next = p3; // 第四步,連線原連結串列後面的結點到新連結串列中 if (p3 && p3->next) { p1 = p3; p2 = p1->next; } else { break; } } return temp; } };
獲取更多精彩,請關注「seniusen」!