`
frank-liu
  • 浏览: 1682172 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

原问题链接: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;
    }
}

  

  • 大小: 7 KB
  • 大小: 8 KB
  • 大小: 8.3 KB
  • 大小: 7.3 KB
分享到:
评论

相关推荐

    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:力码

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

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

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

    多线程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

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

    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题目+解析+思路+答案.pdf

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

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

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

    Leetcode答案(c++版)

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

    CleanCodeHandbook_v1.0.3

    - Swap Nodes in Pairs(交换链表中的节点) 6. BinaryTree(二叉树): 二叉树是每个节点最多有两个子节点的树数据结构,常用于组织数据,以便进行快速查找、插入和删除。文件中提到的二叉树相关题目包括: - ...

    算法面试通关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个一组反转链表。 - 实现思路:维护一个指针...

    leetcode java

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

    LeetCode练习答案

    - **两两交换链表节点(Swap Nodes in Pairs)**: 给定一个链表,交换它相邻节点成对出现的形式。 - **排序链表(Sort List)**: 对一个链表进行排序。 - **旋转链表(Rotate List)**: 给定一个链表和一个整数k,将链表向...

Global site tag (gtag.js) - Google Analytics