24.M 两两交换链表中的节点
Problem: 24. 两两交换链表中的节点
思路
思路1:递归。
通过递归方式两两交换链表中的节点。如果链表为空,或者只有一个节点,则不做处理。
思路2:迭代法。构造一个dummy节点,每次交换两个节点:
假如交换之前的节点关系是temp -> node1 -> node2
,交换之后的节点关系要变成temp -> node2 -> node1
,因此需要进行如下操作:
temp.next = node2
node1.next = node2.next
node2.next = node1
Code
代码1:
func swapPairs(head *ListNode) *ListNode {
if head == nil || head.Next == nil {
return head
}
pre := head
cur := head.Next
next := head.Next.Next
cur.Next = pre
pre.Next = swapPairs(next)
return cur
}
代码2:
func swapPairs(head *ListNode) *ListNode {
dummyHead := &ListNode{Val: -1, Next: head}
temp := dummyHead
for temp.Next != nil && temp.Next.Next != nil {
node1 := temp.Next
node2 := temp.Next.Next
temp.Next = node2
node1.Next = node2.Next
node2.Next = node1
temp = node1
}
return dummyHead.Next
}
Last updated
Was this helpful?