題目描述
給定一個連結串列,兩兩交換其中相鄰的節點,並返回交換後的連結串列。
示例:
給定 1->2->3->4, 你應該返回 2->1->4->3.
說明:
- 你的演算法只能使用常數的額外空間。
- 你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。
程式碼實現
// ListNode Definition for singly-linked list.
type ListNode struct {
Val int
Next *ListNode
}
func swapPairs(head *ListNode) *ListNode {
if head == nil || head.Next == nil {
return head
}
var prev *ListNode
cur := head
head = cur.Next
for ; cur != nil && cur.Next != nil; cur = cur.Next {
next := cur.Next
//注意:第一次迴圈時,prev為nil
if prev != nil {
prev.Next = next
}
//交換兩個節點
cur.Next, next.Next, prev = next.Next, cur, cur
}
return head
}
GitHub
- 原始碼傳送門
- 專案中會提供各種資料結構及演算法的Golang實現, LeetCode解題思路及答案