Leetcode 24题 两两交换链表中的节点(Swap Nodes in Pairs))Java语言求解
题目描述:
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
给定 1->2->3->4,你应该返回 2->1->4->3.
注意事项
1、不能简单的交换数值,而是需要更改指针,即确实更改了节点;
2、如果节点个数是奇数,如下图:

那么第5个节点不用交换。只需变成如下图所示链表即可:

但是再考虑节点个数的奇偶,逻辑会比较麻烦;
3、在交换的过程中指针的指向如何更改也是一个问题。
如何交换
以交换3和4为例;

需要进行如下几步操作:
将2节点的next域指向4节点;
将4节点的next域指向3节点;
将3节点的next域指向5节点。
所以可以定义一个交换函数,传进2节点去,记为pre,pre的next域指向的节点(此案例中为3节点)定义为next,
所以分析的步骤即为
//定义一个保存pre.next的节点
ListNode next = pre.next;
//将pre节点的next域指向pre后两个节点
pre.next = next.next;
//prer后一个节点的next域指向pre的后3个节点
next.next = next.next.next;
//在原始状态下时pre的后两个节点的next指向pre的后一个节点
pre.next.next = next;
可以看图分析过程:


判断是否交换并移动pre
//1、判断是否交换
while(pre.next != null && pre.next.next != null){
swap(pre);
//2、指针向后移动两个
pre = pre.next.next;
}
对判断是否交换的一些说明:
如果pre的后一个节点与后两个节点都非空,则进行交换。
完整代码
class Solution {
public ListNode swapPairs(ListNode head) {
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode pre= dummy;
while(pre.next != null && pre.next.next != null){
swap(pre);
pre = pre.next.next;
}
return dummy.next;
}
public void swap(ListNode pre){
ListNode next = pre.next;
pre.next = next.next;
next.next = next.next.next;
pre.next.next = next;
}
}
对代码的一些说明:
1、dummy节点用来表示head的前驱节点,是一个伪节点;
2、最后返回伪节点的next域指向的节点。
欢迎关注
扫下方二维码即可关注:

Leetcode 24题 两两交换链表中的节点(Swap Nodes in Pairs))Java语言求解的更多相关文章
- [Swift]LeetCode24. 两两交换链表中的节点 | Swap Nodes in Pairs
Given a linked list, swap every two adjacent nodes and return its head. Example: Given 1->2->3 ...
- C#LeetCode刷题之#237-删除链表中的节点(Delete Node in a Linked List)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3832 访问. 请编写一个函数,使其可以删除某个链表中给定的(非末 ...
- C#LeetCode刷题之#203-删除链表中的节点(Remove Linked List Elements)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3826 访问. 删除链表中等于给定值 val 的所有节点. 输入: ...
- Java实现 LeetCode 24 两两交换链表中的节点
24. 两两交换链表中的节点 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2->3-&g ...
- leetcode 24. 两两交换链表中的节点 及 25. K 个一组翻转链表
24. 两两交换链表中的节点 问题描述 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2-> ...
- 【LeetCode】24.两两交换链表中的节点
24.两两交换链表中的节点 知识点:链表 题目描述 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点.你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换). 示例 示例 1 ...
- LeetCode 24. 两两交换链表中的节点(Swap Nodes in Pairs)
题目描述 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 示例: 给定 1->2->3->4, 你应该返回 2->1->4->3. 说明: 你的算法只能 ...
- NO.24两两交换链表中的节点
NO.24两两交换链表中的节点 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例:给定 1->2->3-&g ...
- LeetCode-024-两两交换链表中的节点
两两交换链表中的节点 题目描述:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例说明请见LeetCode官网. 来源:力 ...
- lintcode-451-两两交换链表中的节点
451-两两交换链表中的节点 给一个链表,两两交换其中的节点,然后返回交换后的链表. 样例 给出 1->2->3->4, 你应该返回的链表是 2->1->4->3. ...
随机推荐
- 回顾vim,ftp
常用服务器 ftp,ssh FTP是文件传输协议的简称,文传协议,用于internet上控制文件的双向传输 它也是一个应用程序,,基于不同的操作系统有不同的FTP应用程序,都遵循同一种协议以传输文件. ...
- SaltSack 中Job管理
一.简介 Jid: job id的格式为%Y%m%d%H%M%S%f master在下发指令消息时,会附带上产生的jid,minion在接收到指令开始执行时,会在本地的cachedir(默认是/var ...
- 【学习笔记】 2-SAT问题
Algorithm Description \(2-SAT\)问题就是给定一串布尔变量,每个变量只能为真或假. 要求对这些变量进行赋值,满足布尔方程. 会有一些形如 \(x_1||x_2\) 或者 \ ...
- [LC] 452. Minimum Number of Arrows to Burst Balloons
There are a number of spherical balloons spread in two-dimensional space. For each balloon, provided ...
- P2448 无尽的生命(树状数组+离散化)
题目描述 逝者如斯夫,不舍昼夜! 叶良辰认为,他的寿命是无限长的,而且每天都会进步. 叶良辰的生命的第一天,他有1点能力值.第二天,有2点.第n天,就有n点.也就是S[i]=i 但是调皮的小A使用时光 ...
- 基于TCP的大文件发送、UDP、socketserver
基于TCP的大文件发送 #server服务端 import struct import json import os import socket server = socket.socket() # ...
- @EnableWebMvc WebMvcConfigurer CorsConfig
package me.zhengjie.core.config; import org.springframework.context.annotation.Configuration; import ...
- LeetCode No.67,68,69
No.67 AddBinary 二进制求和 题目 给定两个二进制字符串,返回他们的和(用二进制表示). 输入为非空字符串且只包含数字 1 和 0. 示例 输入: a = "11", ...
- 最大流/最小割模板(isap) POJ1273
isap模板核心代码: //d[]为距离标号数组,d[i]表示节点i到汇点的距离 //gap[]为GAP优化数组,gap[i]表示到汇点距离为i的节点个数 int dfs(int k,int flow ...
- 使用jQuery在屏幕上居中一个DIV
文章目录 我如何去使用jQuery在屏幕的中心设置<div>? 我喜欢给jQuery添加函数,所以这个函数将有助于: jQuery.fn.center = function () { th ...