給定乙個鍊錶,兩兩交換其中相鄰的節點,並返回交換後的鍊錶。
你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。
示例1 :
輸入:head = [1,2,3,4]
輸出:[2,1,4,3]
示例 2:
輸入:head =
輸出:
示例 3:
輸入:head = [1]
輸出:[1]
本題可以分為遞迴方法和迭代方法。首先來看遞迴方法,我們需要明確每一步做什麼,無非就是兩個節點顛倒順序,假設當前節點為head
,下乙個節點為newnode = head.next
,每次交換完成後,newnode
成為佇列的第乙個節點,head
成為佇列的第二個節點。判斷結束的條件就是當前節點為空或者當前節點的下乙個節點為空。
具體**如下:
/**
* definition for singly-linked list.
* public class listnode
* listnode(int val)
* listnode(int val, listnode next)
* }*/class solution
}
這道題用遞迴有點繞,我們來看下迭代的方式如何操作。一看到題目最直觀的想法就是兩個指標指向當前節點和下乙個節點,然後交換,指標指向下一對進行交換即可。這裡我們需要用到乙個啞結點和乙個臨時指標(如果不額外加入會造成鍊錶連不上的情況)。讓dummy.next = head; temp = dummy
,首先temp.next.next = q
,即讓temp
的下乙個節點為交換元素中的第二個位置上的元素q
,這樣交換完成後q
變到第乙個位置,p
變為第二個位置,而dummy
指向了q
,即將鍊錶連線了起來,最後讓temp
指向p
即可。
具體**如下:
/**
* definition for singly-linked list.
* public class listnode
* listnode(int val)
* listnode(int val, listnode next)
* }*/class solution
return dummy.next;}}
兩兩交換鍊錶節點24
方法一 迭代 我們把鍊錶分為兩部分,即奇數節點為一部分,偶數節點為一部分,a 指的是交換節點中的前面的節點,b 指的是要交換節點中的後面的節點。在完成它們的交換,我們還得用 prevnode 記錄 a 的前驅節點。演算法 1.firstnode 即 a 和 secondnode 即 b 分別遍歷偶數...
24 兩兩交換鍊錶中的節點
給定乙個鍊錶,兩兩交換其中相鄰的節點,並返回交換後的鍊錶。示例 給定 1 2 3 4,你應該返回 2 1 4 3.說明 你的演算法只能使用常數的額外空間。你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。要求從前往後,兩兩交換,意味著每一組的第二個指向的下乙個也應該是交換過了的,自然想到...
24 兩兩交換鍊錶中的節點
給定乙個鍊錶,兩兩交換其中相鄰的節點,並返回交換後的鍊錶。你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。給定 1 2 3 4,你應該返回 2 1 4 3.definition for singly linked list.class listnode def init self,x ...