1. 程式人生 > >鏈表-LeetCode24兩兩交換鏈表中的節點

鏈表-LeetCode24兩兩交換鏈表中的節點

emp 應該 出現 內部 單純 結點 操作 節點 頭節點

給定一個鏈表,兩兩交換其中相鄰的節點,並返回交換後的鏈表。

示例:

給定 1->2->3->4, 你應該返回 2->1->4->3.

說明:

  • 你的算法只能使用常數的額外空間。
  • 你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。

分析:類似於數組中的鏈表交換,題目中的head是實際的第一個帶值的節點,而不是空頭節點,由於不能出現空指針,所以,可以創建一個值為0的頭結點。

/**
 * 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* emptynode=new ListNode(0); emptynode->next=head; //定義節點p,完成鏈表的遍歷 ListNode* p=emptynode; while(p->next!=NULL&&p->next->next!=NULL){ ListNode
* node1=p->next; ListNode* node2=node1->next; ListNode* node3=node2->next; p->next=node2; node2->next=node1; node1->next=node3; //p節點每次走兩個節點(兩步) p=node1; } return emptynode->next; } };

鏈表-LeetCode24兩兩交換鏈表中的節點