Leecode 24. 两两交换链表中的节点

简介: Leecode 24. 两两交换链表中的节点

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

示例:

给定 1->2->3->4, 你应该返回 2->1->4->3.

解题思路:

  • 首先建立一个虚拟的结点,用于来交换指针的
  • 使得虚拟结点指向头结点- 给虚拟结点赋值给pre指针
  • 只要头结点和头结点的下一个结点都不为空,那就交换firstNode和secodeNode,继续将虚拟结点赋为此时的firstNode,头结点head指向它的下一个结点,依次遍历完整个链表,这样子就实现了两两互相交换

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode swapPairs(ListNode head) {
        ListNode dummy = new ListNode(-1);
        dummy.next = head;
        ListNode pre = dummy;
        while((head != null) && (head.next != null)){
            ListNode firstNode = head;
          ListNode secondNode = firstNode.next;
            pre.next = secondNode;
            firstNode.next = secondNode.next;
            secondNode.next = firstNode;
            pre = firstNode;
            head = firstNode.next;
        }
        return dummy.next;
    }
}

运行效率截图:


相关文章
|
7天前
|
存储 Python
链表中插入节点
链表中插入节点
|
7天前
|
存储 Python
删除链表节点详解
删除链表节点详解
|
7天前
|
存储 Python
链表中删除节点
链表中删除节点
|
8天前
|
存储 C语言
C语言中处理动态数据类型链表节点冲突的技术探讨
C语言中处理动态数据类型链表节点冲突的技术探讨
19 0
|
10天前
<数据结构>五道LeetCode链表题分析.环形链表,反转链表,合并链表,找中间节点.
<数据结构>五道LeetCode链表题分析.环形链表,反转链表,合并链表,找中间节点
20 1
|
11天前
|
索引
【力扣刷题】删除链表的倒数第 N 个结点、两两交换链表中的节点、随机链表的复制
【力扣刷题】删除链表的倒数第 N 个结点、两两交换链表中的节点、随机链表的复制
17 0
|
22天前
|
算法
LeetCode刷题---19. 删除链表的倒数第 N 个结点(双指针-快慢指针)
LeetCode刷题---19. 删除链表的倒数第 N 个结点(双指针-快慢指针)
|
22天前
|
存储
LeetCode刷题---817. 链表组件(哈希表)
LeetCode刷题---817. 链表组件(哈希表)
|
22天前
【移除链表元素】LeetCode第203题讲解
【移除链表元素】LeetCode第203题讲解
|
22天前
|
算法 安全 数据处理
LeetCode刷题---707. 设计链表(双向链表-带头尾双结点)
LeetCode刷题---707. 设计链表(双向链表-带头尾双结点)