LeetCode刷题Java版024.两两交换链表中的节点
作者:沉默王二
发布时间:2022-08-11T23:38:11.834+0800
024.两两交换链表中的节点
题意
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
难度
中等
示例
输入:head = [1,2,3,4]
输出:[2,1,4,3]
分析
我们学过了链表节点的插入和链表节点的删除,其实想一想,链表节点的两两交换也是一样的道理,我们以较为简单的,仅仅含有三个节点的链表为例,我们来模拟一遍。
然后用代码描述出来:
/**
* * 定义一个简单的链表.*
* * public class ListNode {*
* * int val;*
* * ListNode next;*
* * ListNode() {}*
* * ListNode(int val) { this.val = val; }*
* * ListNode(int val, ListNode next) { this.val = val; this.next = next; }*
* * }*
* /
public class Solution {
public ListNode swapPairs(ListNode nowPos) {
if(nowPos == null || nowPos.next == null)
return nowPos;
// 新节点复制 nowPos.next (防止之后的修改被覆盖掉,从而丢失)
ListNode newNode = nowPos.next ;
//更改nowPos.next 的信息
nowPos.next = swapPairs(newNode.next );
//修改newNode(原nowPos.next )的信息,完成交换,同时原本的nowPos.next 彻底被替换
newNode.next = nowPos;
return newNode;
}
}
完美解决
总结
其实有关链表的相关题目,最重要的切入角度,就是理清楚节点之间的关系,然后在纸上画一画,切莫一个劲的只靠脑子不靠笔,往往思考了很久的问题,动动笔,其实就豁然开朗,而在实现的时候则注重一一对应,用代码准确的描述出你的思路,这样子链表的问题便迎刃而解。
力扣链接:https://leetcode.cn/problems/swap-nodes-in-pairs/
024.两两交换链表中的节点
题意
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
难度
中等
示例
输入:head = [1,2,3,4]
输出:[2,1,4,3]
分析
我们学过了链表节点的插入和链表节点的删除,其实想一想,链表节点的两两交换也是一样的道理,我们以较为简单的,仅仅含有三个节点的链表为例,我们来模拟一遍。
然后用代码描述出来:
/**
* * 定义一个简单的链表.*
* * public class ListNode {*
* * int val;*
* * ListNode next;*
* * ListNode() {}*
* * ListNode(int val) { this.val = val; }*
* * ListNode(int val, ListNode next) { this.val = val; this.next = next; }*
* * }*
* /
public class Solution {
public ListNode swapPairs(ListNode nowPos) {
if(nowPos == null || nowPos.next == null)
return nowPos;
// 新节点复制 nowPos.next (防止之后的修改被覆盖掉,从而丢失)
ListNode newNode = nowPos.next ;
//更改nowPos.next 的信息
nowPos.next = swapPairs(newNode.next );
//修改newNode(原nowPos.next )的信息,完成交换,同时原本的nowPos.next 彻底被替换
newNode.next = nowPos;
return newNode;
}
}
完美解决
总结
其实有关链表的相关题目,最重要的切入角度,就是理清楚节点之间的关系,然后在纸上画一画,切莫一个劲的只靠脑子不靠笔,往往思考了很久的问题,动动笔,其实就豁然开朗,而在实现的时候则注重一一对应,用代码准确的描述出你的思路,这样子链表的问题便迎刃而解。
力扣链接:https://leetcode.cn/problems/swap-nodes-in-pairs/
024.两两交换链表中的节点
题意
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
难度
中等
示例
输入:head = [1,2,3,4]
输出:[2,1,4,3]
分析
我们学过了链表节点的插入和链表节点的删除,其实想一想,链表节点的两两交换也是一样的道理,我们以较为简单的,仅仅含有三个节点的链表为例,我们来模拟一遍。
然后用代码描述出来:
/**
* * 定义一个简单的链表.*
* * public class ListNode {*
* * int val;*
* * ListNode next;*
* * ListNode() {}*
* * ListNode(int val) { this.val = val; }*
* * ListNode(int val, ListNode next) { this.val = val; this.next = next; }*
* * }*
* /
public class Solution {
public ListNode swapPairs(ListNode nowPos) {
if(nowPos == null || nowPos.next == null)
return nowPos;
// 新节点复制 nowPos.next (防止之后的修改被覆盖掉,从而丢失)
ListNode newNode = nowPos.next ;
//更改nowPos.next 的信息
nowPos.next = swapPairs(newNode.next );
//修改newNode(原nowPos.next )的信息,完成交换,同时原本的nowPos.next 彻底被替换
newNode.next = nowPos;
return newNode;
}
}
完美解决
总结
其实有关链表的相关题目,最重要的切入角度,就是理清楚节点之间的关系,然后在纸上画一画,切莫一个劲的只靠脑子不靠笔,往往思考了很久的问题,动动笔,其实就豁然开朗,而在实现的时候则注重一一对应,用代码准确的描述出你的思路,这样子链表的问题便迎刃而解。
力扣链接:https://leetcode.cn/problems/swap-nodes-in-pairs/
知识星球
扫码加入星球
查看更多优质内容
https://wx.zsxq.com/mweb/views/joingroup/join_group.html?group_id=15522885221412