由於國慶比較鹹魚,不知不覺中挑的題目都比較水了,這題的主要意思就是將每對相鄰的節點相互對調,但是不能只對調它們的值,所以考察的是對鏈表的基本操作,幾乎說不上什麼難度,我對它被標爲Medium難度表示不是很理解。
我的解決方法是,先判斷這個鏈表是不是隻有一個或者兩個節點,如果是,那就不需要對調。另外的情況下,就先保存原本第二個節點的指針(因爲它最終會成爲鏈表的頭),然後開始對相鄰節點進行對調,值得注意的是,由於中間部分的節點(比如A->B->C->D中的C和D)在對調之後,它們之前的那個節點(B)需要對next進行重新賦值,所以在每次循環最後有個保存上一節點指針的動作(front = …)。
代碼如下
/**
* 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) return head;
if (head->next == NULL) return head;
ListNode* result = head->next;
ListNode* front = NULL;
while (head != NULL) {
ListNode* temp = head->next;
if (temp != NULL) {
head->next = temp->next;
temp->next = head;
if (front != NULL) {
front->next = temp;
}
}
front = head;
head = head->next;
}
return result;
}
};