问题描述:
Given a linked list, swap every two adjacent nodes and return its head.
For example,
Given 1->2->3->4
, you should return the list as 2->1->4->3
.
Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed.
原问题链接:https://leetcode.com/problems/swap-nodes-in-pairs/
问题分析
这个问题看起来比较简单,主要是要对里面的实现细节考虑清楚了。我们可以结合一个图来考虑。
假定我们有这么一个链表,我们首先设定它们要交换的两个元素分别为first, second。
因为要交换first, second, 所以首先将first.next赋值给second.next:
然后再将first.next指向second:
由上图很明显,我们还需要调整pre引用,使得pre.next = first:
上面的描述是针对某个时候节点调整的细节。不过既然前面要求是对整个链表里每两个相邻的元素都这么调整。那么这里必然是用一个循环来处理。在每个循环的开始,我们将pre.next赋值给second,pre.next.next赋值给first。因为链表里元素可能有奇数个或者偶数个元素,我们可以将pre.next != null && pre.next.next != null作为循环跳出的条件。
这样,作为一个完整的循环。我们会在每个循环的开始将pre.next, pre.next.next分别赋值给second和first。同时在调整结束后将pre设置为second的值。这样方便在下一个循环继续调整。
按照前面的讨论,详细实现的代码如下:
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ public class Solution { public ListNode swapPairs(ListNode head) { if(head == null || head.next == null) return head; ListNode temp = new ListNode(0); temp.next = head; ListNode pre = temp, first = null, second = null; while(pre.next != null && pre.next.next != null) { first = pre.next.next; second = pre.next; second.next = first.next; first.next = second; pre.next = first; pre = second; } return temp.next; } }
相关推荐
c c语言_leetcode 0024_swap_nodes_in_pairs.zip
js js_leetcode题解之24-swap-nodes-in-pairs.js
c语言入门 C语言_leetcode题解之24-swap-nodes-in-pairs.c
第四章 Leetcode 题解 1. Two Sum 2. Add Two Numbers 3. Longest Substring Without Repeating Characters 4. Median of Two Sorted Arrays...24. Swap Nodes in Pairs 25. Reverse Nodes in k-Group 26. Remove Dupli
leetcode添加元素使和等于 总结 按照类别分类来刷 刷当前题的时候,看下『题目描述』...swap-nodes-in-pairs linked-list-cycle linked-list-cycle-ii reverse-nodes-in-k-group 二叉树 实现一个二叉树 二叉树二叉树的
leetcode下载 Algorithm 每日一题 && 天天进步一点点 题目来于 LeetCode,剑指offer,Coding Interview,ZOJ,POJ 等平台。 欢迎Coders对代码加以指正和提议!...Nodes in Pairs 练习: leetcode: 237. D
Swap Nodes in Pairs Spiral Matrix Path Sum II Copy List with Random Pointer Building H2O Fizz Buzz Multithreaded hard Merge k Sorted Lists Reverse Nodes in k-Group Trapping Rain Water
24:swap-nodes-in-pairs 漂亮的递归解决方案 25: reverse-nodes-in-k-group: 解析 pre_for_next 到辅助函数 29:除以两个整数:溢出; 两反 31:下一个排列:再做一次(排序!) 32:最长有效(),使用栈,左推idx ...
22. Swap Nodes in Pairs:在链表中交换相邻节点。 23. Merge K Sorted Lists:合并 k 个排序链表。 24. Copy List with Random Pointer:复制带有随机指针的链表。 【二叉树】 25. Validate Binary Search Tree:...
- **Swap Nodes in Pairs**:交换链表中的相邻节点。 - **Sort List**:对链表进行排序。 - **Rotate List**:将链表顺时针旋转指定次数。 - **Reorder List**:按照特定规则重新排列链表。 - **Partition List...
421 | [Maximum XOR of Two Numbers in an Array](https://leetcode.com/problems/maximum-xor-of-two-numbers-in-an-array/) | [C++](./C++/maximum-xor-of-two-numbers-in-an-array.cpp) [Python](./Python/...
- Swap Nodes in Pairs / Reverse Nodes in k-Group: 这两个问题涉及到在链表中按特定规则交换节点或反转节点组。 - Remove Duplicates from Sorted Array / Remove Element: 删除排序数组中的重复项,或从数组中...
**1.5 Swap Nodes in Pairs (24)** - **问题描述**:给定一个链表,交换每两个相邻节点并返回交换后的链表。 - **解题思路**: - 使用迭代或递归方法,每次处理两个节点。 - 对于迭代方法,需要额外处理指针连接...
- Swap Nodes in Pairs(交换链表中的节点) 6. BinaryTree(二叉树): 二叉树是每个节点最多有两个子节点的树数据结构,常用于组织数据,以便进行快速查找、插入和删除。文件中提到的二叉树相关题目包括: - ...
3. 两两交换链表中的节点(Swap Nodes in Pairs, 如LeetCode的第142题):将链表中相邻的节点两两交换。 4. 链表环检测 II(Linked List Cycle II, 如LeetCode的第142题):找到链表环内的起点。 5. K 个一组翻转...
- **2.2.8 Swap Nodes in Pairs** - 两两交换链表中的节点。 - 实现思路:使用虚拟头结点,每次交换两个节点即可。 - **2.2.9 Reverse Nodes in k-Group** - 每k个一组反转链表。 - 实现思路:维护一个指针...
- 题目包括合并两个有序链表(Merge Two Sorted Lists)、在单链表中交换相邻节点(Swap Nodes in Pairs)。 - 有难度的链表题目则要求合并K个有序链表(Merge K Sorted Lists)、复制带有随机指针的链表(Copy List...
- **两两交换链表节点(Swap Nodes in Pairs)**: 给定一个链表,交换它相邻节点成对出现的形式。 - **排序链表(Sort List)**: 对一个链表进行排序。 - **旋转链表(Rotate List)**: 给定一个链表和一个整数k,将链表向...