新博文地址:[leetcode]Swap Nodes in Pairs
http://oj.leetcode.com/problems/swap-nodes-in-pairs/
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.
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.
转换相邻节点的前后次序
要求:空间复杂度O(1),不能改变ListNode的值
好吧,暂时无视这些要求:
1. 如果可以改变ListNode的值,程序会非常简单:直接交换节点与后继节点的值即可
public ListNode swapPairsWithModifyValues(ListNode head) { ListNode tail = head; while (tail != null) { if (tail.next != null) { int tem = tail.val; tail.val = tail.next.val; tail.next.val = tem; tail = tail.next.next; } else { break; } } return head; }
2. 如果可以分配空间,需要借助栈来实现,也是相当简单的:(由于只需要转置2个节点,因此栈空间开到2就可以了)
public ListNode swapPairsWithExtraSpace(ListNode head) { if (head == null) { return null; } Stack stack = new Stack<ListNode>(); ListNode tail = head; ListNode newHead = new ListNode(0); ListNode newTail = newHead; while (tail != null) { stack.push(tail); tail = tail.next; if (tail != null) { stack.push(tail); tail = tail.next; newTail.next = new ListNode(((ListNode) stack.pop()).val); newTail = newTail.next; } newTail.next = new ListNode(((ListNode) stack.pop()).val); newTail = newTail.next; } return newHead.next; }
3. 无空间,不修改节点值的做法,需要维护四个指针,这个大家画个图就出来了,解释起来比较麻烦。。。(太没节操了。。。)
public ListNode swapPairs(ListNode head) { if (head == null) { return null; } ListNode preHead = new ListNode(0, head); ListNode node = head.next; ListNode prePre = preHead; ListNode pre = head; while (node != null) { ListNode post = node.next; node.next = pre; pre.next = post; prePre.next = node; if(post == null){ break; } prePre = pre; node = post.next; pre = post; if(node == null){ break; } post = node.next; } return preHead.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
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
22. Swap Nodes in Pairs:在链表中交换相邻节点。 23. Merge K Sorted Lists:合并 k 个排序链表。 24. Copy List with Random Pointer:复制带有随机指针的链表。 【二叉树】 25. Validate Binary Search Tree:...
leetcode下载 Algorithm 每日一题 && 天天进步一点点 题目来于 LeetCode,剑指offer,Coding Interview,ZOJ,POJ 等平台。 欢迎Coders对代码加以指正和提议!...Nodes in Pairs 练习: leetcode: 237. D
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**:交换链表中的相邻节点。 - **Sort List**:对链表进行排序。 - **Rotate List**:将链表顺时针旋转指定次数。 - **Reorder List**:按照特定规则重新排列链表。 - **Partition List...
- Swap Nodes in Pairs / Reverse Nodes in k-Group: 这两个问题涉及到在链表中按特定规则交换节点或反转节点组。 - Remove Duplicates from Sorted Array / Remove Element: 删除排序数组中的重复项,或从数组中...
- 题目包括合并两个有序链表(Merge Two Sorted Lists)、在单链表中交换相邻节点(Swap Nodes in Pairs)。 - 有难度的链表题目则要求合并K个有序链表(Merge K Sorted Lists)、复制带有随机指针的链表(Copy List...
**1.5 Swap Nodes in Pairs (24)** - **问题描述**:给定一个链表,交换每两个相邻节点并返回交换后的链表。 - **解题思路**: - 使用迭代或递归方法,每次处理两个节点。 - 对于迭代方法,需要额外处理指针连接...
24:swap-nodes-in-pairs 漂亮的递归解决方案 25: reverse-nodes-in-k-group: 解析 pre_for_next 到辅助函数 29:除以两个整数:溢出; 两反 31:下一个排列:再做一次(排序!) 32:最长有效(),使用栈,左推idx ...
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个一组反转链表。 - 实现思路:维护一个指针...
在给定的代码中,我们讨论的是一个C++实现的解决方案,用于解决LeetCode上的问题“两两交换链表中的节点”(Swap Nodes in Pairs)。这个问题要求我们接收一个单链表,然后将相邻的节点两两交换,返回交换后的链表。...
leetcode添加元素使和等于 总结 按照类别分类来刷 刷当前题的时候,看下『题目描述』...swap-nodes-in-pairs linked-list-cycle linked-list-cycle-ii reverse-nodes-in-k-group 二叉树 实现一个二叉树 二叉树二叉树的
024_Swap_Nodes_in_Pairs 025_Reverse_Nodes_in_k-Group 026_Remove_Duplicates_from_Sorted_Array 027_Remove_Element 028_Implement_strStr() 029_Divide_Two_Integers 030_Substring_with_Concatenation...