LeetCode 24 兩兩交換鍊錶中的節點 C

2021-10-10 13:51:17 字數 1375 閱讀 4215

新的更新內容請到mwhls.top檢視。

無圖/格式錯誤請到上方的文章首發頁面檢視。

題目給定乙個鍊錶,兩兩交換其中相鄰的節點,並返回交換後的鍊錶。

你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。

示例 1:

輸入:head = [1,2,3,4]

輸出:[2,1,4,3]

示例 2:

輸入:head =

輸出:示例 3:

輸入:head = [1]

輸出:[1]

鍊錶中節點的數目在範圍 [0, 100] 內

0 <= node.val <= 100

思路首先要確定返回鍊錶的頭結點:

如果是空鍊錶,或是只有乙個結點,那麼直接返回頭結點即可。

如果有至少兩個結點,則將頭結點resulthead設定為第二個結點,因為兩兩交換後,第二個結點會成為頭結點。

之後要設定乙個臨時結點,作為交換的媒介,

交換操作都在head結點上進行。

因為第一次交換時,這兩個結點前沒有結點,而後續的結點對前都有結點,需要設定前面結點的next指標,因此,交換需要分為兩個部分,前兩個結點,和其他結點。

前兩個結點的交換方式如下:

臨時結點儲存第三個結點的指標,即tempnode = head->next->next;

第二個結點的next結點設定為頭結點,即head->next->next = head;

第乙個結點的next結點設定為第三個結點(臨時結點),即head->next = tempnode;

交換完成,結點順序為:2->1->3->4->...

之後判斷head結點後的第二個結點是否存在,如果存在則需要對後面兩個結點進行交換,並且還需修改head結點的next結點,操作如下:

為了方便理解,第二部分的交換以例子來講解:

此時需要先儲存下3的位址

再將1->next設定為4,此時為2->1->4->5->6

再將3->next設定為5,此時2->1->4->5->6以及3->5->6

再將4->next設定為3,此時2->1->4->3->5->6,

最後,將head結點由1切換至3,以便迴圈中的下一輪交換。

** struct listnode *resulthead = head;

struct listnode *tempnode;

if(!head || !head->next) return head;

else if(resulthead->next)

while(head && head->next && head->next->next)

return resulthead;}

LeetCode 24兩兩交換鍊錶的節點

給定乙個鍊錶,兩兩交換其中相鄰的節點,並返回交換後的鍊錶。你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。示例 給定 1 2 3 4,你應該返回 2 1 4 3.class solution listnode next head.next head.next next.next 指向下...

leetcode24 兩兩交換鍊錶中的節點

給定乙個鍊錶,兩兩交換其中相鄰的節點,並返回交換後的鍊錶。示例 給定 1 2 3 4,你應該返回 2 1 4 3.說明 你的演算法只能使用常數的額外空間。你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。注意while裡tmp1和tmp2已經交換了,所以node tmp1 definit...

leetcode 24 兩兩交換鍊錶中的節點

給定乙個鍊錶,兩兩交換其中相鄰的節點,並返回交換後的鍊錶。示例 給定 1 2 3 4,你應該返回 2 1 4 3.複製 說明 listnode definition for singly linked list.type listnode struct func head listnode list...