题目描述
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
示例
输入:head = [1,2,3,4]
输出:[2,1,4,3]
解析
首先链表类的相关题目,一定要想到用头节点,会比较方便;然后主要就是两两交换,交换的时候想不明白可以画图,然后写代码的时候就跟着画图的步骤一步一步写就行;
写代码的时候,这个比反转链表要复杂,要用到头节点;然后按照下面这个图想代码:
正确的代码:
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func swapPairs(head *ListNode) *ListNode {
//先定义一个哑节点
dummy := &ListNode{
Next : head,
}
pre := dummy
for head != nil && head.Next != nil { // 这里不需要定义cur = head,因为本身这个链表是要被改变的,有dummy.Next作为开头的定位就行,当然定义一个cur = head也能实现
pre.Next = head.Next
next := head.Next.Next
head.Next.Next = head
head.Next = next
pre = head
head = next
}
return dummy.Next
}