1. 程式人生 > >連結串列-LeetCode24兩兩交換連結串列中的節點

連結串列-LeetCode24兩兩交換連結串列中的節點

給定一個連結串列,兩兩交換其中相鄰的節點,並返回交換後的連結串列。

示例:

給定 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; } };