两两交换链表中的节点

学习文本来源:代码随想录

力扣地址

给定一个列表,两两交换其中相邻的节点,并返回交换后的链表。

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

示例1:

  • 输入:head = [1,2,3,4]
  • 输出:[2,1,4,3]

示例2:

  • 输入:head = []
  • 输出:[]

示例3:

  • 输入:head=[1]
  • 输出: [1]

思路

这道题正常模拟就可以了。

建议使用虚拟头结点,这样会方便很多,要不然每次针对头结点,还是要单独处理。

接下来就是交换两个相邻元素,此时一定要画图,不画图,操作多个指针容易乱,而且要操作的先后顺序

初始是,cur指向头结点,然后进行如下三步:
swap-01.png

代码

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
}
Last modification:May 28, 2024
如果觉得我的文章对你有用,请收藏本站