鏈表-LeetCode24兩兩交換鏈表中的節點
阿新 • • 發佈:2018-12-24
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兩兩交換鏈表中的節點