码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode24. 两两交换链表中的节点

时间:2021-05-24 12:22:03      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:wap   构造   循环   swa   注意   ret   class   new   java   

LeetCode24. 两两交换链表中的节点

题目描述

/**
     * 
     * 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
     * <p>
     * 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
     * 
     */

思路分析

  1. 使用迭代的思想,依次将两两节点进行交换
  2. 此题目中head节点指向一个非空的元素,因此可以定义一个空节点,作为交换后节点的头节点,因此先构造一个以空节点开头的新节点,然后依次两两交换
  3. 注意节点元素的指向发生变化时,按照顺序将指向发生变化
  4. 分析如下

源码及分析

public ListNode swapPairs(ListNode head) {
        //数据校验
        if (head == null || head.next == null) {
            return head;
        }
        //定义一个辅助头节点指向原始的链表,形成一个带有头节点的新链表,然后操作新链表
        ListNode newHead = new ListNode();
        newHead.next = head;
        //因为头节点newHead不能动,定义一个辅助变量cur
        ListNode cur = newHead;
        //循环交换
        while (cur.next != null && cur.next.next != null) {
            //定义两个辅助变量保存要交换的两个节点
            ListNode node1 = cur.next;
            ListNode node2 = cur.next.next;
            //定义一个临时变量用于交换
            cur.next = node2;
            node1.next = node2.next;
            node2.next = node1;
            //指针后移,使cur始终指向要交换的节点的前一个节点
            cur = node1;
        }
        return newHead.next;
    }

LeetCode24. 两两交换链表中的节点

标签:wap   构造   循环   swa   注意   ret   class   new   java   

原文地址:https://www.cnblogs.com/mx-info/p/14773227.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!