`
huntfor
  • 浏览: 201308 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

[leetcode]Swap Nodes in Pairs

 
阅读更多

新博文地址:[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.

 转换相邻节点的前后次序

要求:空间复杂度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语言-leetcode 0024-swap-nodes-in-pairs.zip

    c c语言_leetcode 0024_swap_nodes_in_pairs.zip

    js-leetcode题解之24-swap-nodes-in-pairs.js

    js js_leetcode题解之24-swap-nodes-in-pairs.js

    C语言-leetcode题解之24-swap-nodes-in-pairs.c

    c语言入门 C语言_leetcode题解之24-swap-nodes-in-pairs.c

    程序员面试宝典LeetCode刷题手册

    第四章 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-leetcode-java:leetcode上的题解,基于java语言

    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

    Leetcode book刷题必备

    22. Swap Nodes in Pairs:在链表中交换相邻节点。 23. Merge K Sorted Lists:合并 k 个排序链表。 24. Copy List with Random Pointer:复制带有随机指针的链表。 【二叉树】 25. Validate Binary Search Tree:...

    leetcode下载-algorithm-1:力扣、HDU、ZOJ、POJ

    leetcode下载 Algorithm 每日一题 && 天天进步一点点 题目来于 LeetCode,剑指offer,Coding Interview,ZOJ,POJ 等平台。 欢迎Coders对代码加以指正和提议!...Nodes in Pairs 练习: leetcode: 237. D

    LeetCode最全代码

    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/...

    Leetcode题目+解析+思路+答案.pdf

    - **Swap Nodes in Pairs**:交换链表中的相邻节点。 - **Sort List**:对链表进行排序。 - **Rotate List**:将链表顺时针旋转指定次数。 - **Reorder List**:按照特定规则重新排列链表。 - **Partition List...

    _leetcode-python.pdf

    - Swap Nodes in Pairs / Reverse Nodes in k-Group: 这两个问题涉及到在链表中按特定规则交换节点或反转节点组。 - Remove Duplicates from Sorted Array / Remove Element: 删除排序数组中的重复项,或从数组中...

    leetcode java

    - 题目包括合并两个有序链表(Merge Two Sorted Lists)、在单链表中交换相邻节点(Swap Nodes in Pairs)。 - 有难度的链表题目则要求合并K个有序链表(Merge K Sorted Lists)、复制带有随机指针的链表(Copy List...

    Leetcode答案(c++版)

    **1.5 Swap Nodes in Pairs (24)** - **问题描述**:给定一个链表,交换每两个相邻节点并返回交换后的链表。 - **解题思路**: - 使用迭代或递归方法,每次处理两个节点。 - 对于迭代方法,需要额外处理指针连接...

    leetcode296-leetcode-in-py-and-go:Go中的Leetcode

    24:swap-nodes-in-pairs 漂亮的递归解决方案 25: reverse-nodes-in-k-group: 解析 pre_for_next 到辅助函数 29:除以两个整数:溢出; 两反 31:下一个排列:再做一次(排序!) 32:最长有效(),使用栈,左推idx ...

    算法面试通关40讲完整课件 05-07 数组、链表

    3. 两两交换链表中的节点(Swap Nodes in Pairs, 如LeetCode的第142题):将链表中相邻的节点两两交换。 4. 链表环检测 II(Linked List Cycle II, 如LeetCode的第142题):找到链表环内的起点。 5. K 个一组翻转...

    leetcode-cpp刷题

    - **2.2.8 Swap Nodes in Pairs** - 两两交换链表中的节点。 - 实现思路:使用虚拟头结点,每次交换两个节点即可。 - **2.2.9 Reverse Nodes in k-Group** - 每k个一组反转链表。 - 实现思路:维护一个指针...

    手稿_V1.010

    在给定的代码中,我们讨论的是一个C++实现的解决方案,用于解决LeetCode上的问题“两两交换链表中的节点”(Swap Nodes in Pairs)。这个问题要求我们接收一个单链表,然后将相邻的节点两两交换,返回交换后的链表。...

    leetcode添加元素使和等于-leetcode:力码

    leetcode添加元素使和等于 总结 按照类别分类来刷 刷当前题的时候,看下『题目描述』...swap-nodes-in-pairs linked-list-cycle linked-list-cycle-ii reverse-nodes-in-k-group 二叉树 实现一个二叉树 二叉树二叉树的

    Dir-For-LeetCode

    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...

Global site tag (gtag.js) - Google Analytics