返回

LeetCode 0024.两两交换链表中的节点

两两交换链表中的节点

LeetCode0024. 两两交换链表中的节点

题目描述

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。

示例1:

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

示例 2:

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

示例3:

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

思路

题目要求

  • 给定一个链表,两两交换链表中的节点,不能仅交换值
  • 返回两两节点交换后的链表的头节点

这道题目正常模拟节点交换操作就可以。

注意

  • 设置虚拟头节点,使交换操作统一,不然的话针对头结点(没有前一个指针指向头结点),还要单独处理。
  • 一定要画图,不然操作多个指针很容易乱,而且要注意操作的先后顺序:先用临时指针标记要操作的第二个节点,再操作第一个节点,然后操作第二个节点,最后操作cur
  • 将当前指针cur指向虚拟头节点,每次操作cur后面的两个节点
  • 注意循环条件

代码

Go

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func swapPairs(head *ListNode) *ListNode {
    dummyHead := new(ListNode)
    dummyHead.Next = head
    cur := dummyHead
    for cur.Next != nil && cur.Next.Next != nil {
        temp := cur.Next.Next
        cur.Next.Next = temp.Next
        temp.Next = cur.Next
        cur.Next = temp
        cur = temp.Next
    }
    return dummyHead.Next
}

GitHub

Built with Hugo
Theme Stack designed by Jimmy