【实战】ACM 选手图解 LeetCode 交换链表

大家好呀,我是蛋蛋。

今天开搞交换链表,和反转链表一样,也是必考的“老熟人”。

话不多说,直接开工。

40d1f6698708b8161025dbcef5514d4

LeetCode 24:交换链表

题意

两两交换链表相邻节点的值,返回交换后的链表。

示例

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

输出: [2, 1, 4, 3]

提示

  • 0 <= 链表节点数 <= 100

  • 0 <= Node.val <= 100

题目解析

水题,难度中等。

这道题要求不能只是单纯的改变节点内部得值,需要进行实际的节点交换。

和反转链表一样,这类链表题思维上没有难度,就是每次从链表上截取两个节点进行交换

主要是考察代码实现能力

这道题我用带虚拟头节点的单链表实现。

虚拟头节点(其实我以前都叫头节点,后来有臭宝和我说容易看混,我就叫虚拟头节点),可能很多人叫做哨兵节点,放在第一个元素的节点之前,数据域一般没意义。

图解

先建立一个带虚拟头节点的单链表。

fda0fd241a014afc68089959308e254

PS:此处代码为 Python(”代码实现“小节处有 Java 代码,下同)。

# 链表节点类
class ListNode:
     def __init__(self, val=0, next=None):
         self.val = val
         self.next = next
# 创建虚拟节点
dummyHead = ListNode(-1)

因为每次要截取两个节点进行交换,初始建立 3 个指针 pre,p 和 q。

其中 pre 指向虚拟头节点,p 指向链表首节点,q 指向链表的第 2 个节点。

7ee9622db7124b90218b60be2a0f686

pre = dummyHead
p = head
q = p.next

节点两两交换主要分为 3 步。

第 1 步:pre 的后继指针 next 指向 q,即 pre.next = q。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,我无法理解你的问题。请供更多的上下或具体的问题描述,我将竭尽全力为您提供帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [分类整理leetcode算法题解,代码语言采用c++与python实现.zip](https://download.csdn.net/download/qq_35831906/88245562)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [两两认识leetcode-ACM-ICPC-Preparation-master-ct:ACM-ICPC-Preparation-master](https://download.csdn.net/download/weixin_38656064/19943218)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [【LeetcodeACM模式的各种输入处理](https://blog.csdn.net/fisherish/article/details/120402338)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值