LeetCode_24|LeetCode_24 两两交换链表中的节点(链表题)
题目地址:https://leetcode-cn.com/problems/swap-nodes-in-pairs/
题目:
【LeetCode_24|LeetCode_24 两两交换链表中的节点(链表题)】给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
示例:
给定 1->2->3->4, 你应该返回 2->1->4->3.
说明:
- 你的算法只能使用常数的额外空间。
- 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
这道题看描述很简单,但是真正动手写起来还是有些难度的,因为涉及到多指针的操作,因为涉及到链表上节点的两两交换,所以会涉及到3个节点的操作,当前节点、前置节点、前置的前置节点。算法思路就是顺序遍历链表节点,两两交换位置,交换完成后需要进行指针位置移动,做的过程中最好先画图搞清楚指针交换的过程再动手写代码。
代码:
public ListNode swapPairs2(ListNode head) {if(head==null || head.next==null){
return head;
}
//涉及到3个节点操作,前置节点、前置前置节点、当前节点
ListNode cur = head.next;
ListNode prev = head;
ListNode prevPrev = null;
head = head.next;
while(prev!=null && cur!=null){
//当前交换节点非空则交换cur和prev
prev.next = cur.next;
cur.next = prev;
//记录前置前置节点为当次排序第二个节点,用于下次交换
prevPrev = prev;
if(prev.next!=null && prev.next.next!=null) {
prev = prev.next;
cur = prev.next;
prevPrev.next = cur;
}else {
break;
}
}return head;
}
源码路径:com.monkey01.linkedlist.SwapNodesInPairs_24
配套测试代码路径:test目录com.monkey01.linkedlist.SwapNodesInPairs_24Test
https://github.com/feiweiwei/LeetCode4Java.git
推荐阅读
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- leetcode|leetcode 92. 反转链表 II
- 二叉树路径节点关键值和等于目标值(LeetCode--112&LeetCode--113)
- LeetCode算法题-11.|LeetCode算法题-11. 盛最多水的容器(Swift)
- LeetCode(03)Longest|LeetCode(03)Longest Substring Without Repeating Characters
- 你应该看透人生处处的交换
- Leetcode|Leetcode No.198打家劫舍
- [leetcode数组系列]1两数之和
- 数据结构和算法|LeetCode 的正确使用方式
- leetcode|今天开始记录自己的力扣之路