程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> LeetCode之24----Swap Nodes in Pairs

LeetCode之24----Swap Nodes in Pairs

編輯:C++入門知識

LeetCode之24----Swap Nodes in Pairs


題目:

Given a linked list, swap every two adjacent nodes and return its head.

For example,
Given1->2->3->4, you should return the list as2->1->4->3.

Your algorithm should use only constant space. You maynotmodify the values in the list, only nodes itself can be changed.

 

 

題目大意:

  給定一條鏈表,將鏈表相鄰的兩個節點交換,返回交換後的鏈表。

思路:

  本題比較簡單,大致解題方向有兩種:交換節點的值、交換節點的指向。   1、交換節點的值:最簡單的方法就是交換兩個節點的值,達到交換的目的。   2、交換相鄰節點的指向,在即當p2 = p1->next時執行p1->next = p2->next,p2->next = p1。但是在交換的過程中還要保證交換後p2的前驅節點是交換前p1的前驅。   3、還是交換節點的思路,只不過這次的考慮方向不是進行循環交換,而是通過遞歸來交換。遞歸的這種程序簡潔,重點在於思考方式的不同。在這道題裡遞歸的思考方式是考慮一對的情況,然後將這個分析結果應用到後邊的節點,遞歸下去,解出結果。

代碼:

換值:

ListNode* swapPairs(ListNode* head) {
        ListNode *p1 = head, *p2;
        int tmp;
        
        while(p1) {
            p2 = p1->next;
            if (p2) {
                tmp = p1->val;
                p1->val = p2->val;
                p2->val = tmp;
                p1 = p1->next;
            }
            p1 = p1->next;
        }
        
        return head;
 }

換指針:

ListNode* swapPairs(ListNode* head) {
        ListNode *p1 = head, *p2, *tmp;
        
        if (p1 && p1->next) {
            head = head->next;
        }
        
        tmp = head;
        
        while(p1) {
            p2 = p1->next;
            if (p2) {
                p1->next = p2->next;
                p2->next = p1;
                if (tmp != head)
                    tmp ->next = p2;
                tmp = p1;
            }
            p1 = p1->next;
        }
        
        return head;
}

換指針(遞歸版):

ListNode* swapPairs(ListNode* head) {
        ListNode* p1;       
        if(head && head->next){  
            p1 = head->next; 
            head->next = swapPairs(head->next->next);
            p1->next = head;
            head = p1; 
       }
       return head;
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved