Leetcode Swap Nodes in Pairs

這裏寫圖片描述

  由於國慶比較鹹魚,不知不覺中挑的題目都比較水了,這題的主要意思就是將每對相鄰的節點相互對調,但是不能只對調它們的值,所以考察的是對鏈表的基本操作,幾乎說不上什麼難度,我對它被標爲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;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章