方法1 递归实现
func swapPairs(head *ListNode) *ListNode {
if head == nil || head.Next == nil {
return head
}
// 新的头节点是原先链表的第二个节点
newHead := head.Next
// 这是把原先第二个节点后的链表看作一个整体
head.Next = swapPairs(newHead.Next)
// 调换两个节点的顺序
newHead.Next = head
// 返回新的头节点
return newHead
}
方法2 迭代求解
func swapPairs(head *ListNode) *ListNode {
// 创建一个超前指针指向
preHead := &ListNode{0, head}
temp := preHead
for temp.Next != nil && temp.Next.Next != nil {
node1 := temp.Next
node2 := temp.Next.Next
//到目前为止就是temp->node1->node2,下面就是要调整为temp->node2->node1这样的顺序
temp.Next = node2
node1.Next = node2.Next
node2.Next = node1
// 最后temp重新归位
temp = node1
}
return preHead.Next
}

博客介绍了链表问题的两种解决方法,分别是递归实现和迭代求解,有助于掌握链表相关的数据结构知识,可用于解决如LeetCode上的链表题目。
1142

被折叠的 条评论
为什么被折叠?



