两两交换链表中的节点
学习文本来源:代码随想录
给定一个列表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例1:
- 输入:head = [1,2,3,4]
- 输出:[2,1,4,3]
示例2:
- 输入:head = []
- 输出:[]
示例3:
- 输入:head=[1]
- 输出: [1]
思路
这道题正常模拟就可以了。
建议使用虚拟头结点,这样会方便很多,要不然每次针对头结点,还是要单独处理。
接下来就是交换两个相邻元素,此时一定要画图,不画图,操作多个指针容易乱,而且要操作的先后顺序
初始是,cur指向头结点,然后进行如下三步:
代码
goalng:
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func swapPairs(head *ListNode) *ListNode {
dummy := &ListNode{
Next: head,
}
cur := dummy
for cur.Next != nil && cur.Next.Next != nil{
temp := cur.Next //1
temp1 := cur.Next.Next.Next //3
cur.Next = cur.Next.Next //d->2->3->4
cur.Next.Next = temp //d->2->1->2 x 3->4
cur.Next.Next.Next = temp1 // d->2->1->3->4
cur = cur.Next.Next // c = 2
}
return dummy.Next
}