zoukankan      html  css  js  c++  java
  • 24. 两两交换链表中的节点 leetcode

    题目:

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

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

    示例:

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

    解题思路:

    设置三个指针,分别指向前后和当前节点。

    首先设置创建一个prehead结点,用来返回结果。

    接着创建left、mid、right三个结点,交换mid和right结点的位置,然后修改left结点的next值。

    最后使left等于修改后的mid结点(实际上是left、mid、right三个节点中最右位置的结点,因为交换了mid、right结点的位置),mid =left.next,right = mid.next

    class Solution {
        public ListNode swapPairs(ListNode head) {
            if(head == null)
                return head;
            ListNode prehead = new  ListNode(-1);
            prehead.next = head;
            ListNode left = prehead;
            ListNode mid = prehead.next;
            ListNode right = mid.next;
            while(mid != null && right != null)
            {
                mid.next = right.next;
                right.next = mid;
                left.next = right;
                left = mid;
                mid = left.next;
                if(mid != null) //如果mid为空,则需判断一下
                    right = mid.next;
            }    
            return prehead.next;
        }
    }
  • 相关阅读:
    POJ 1470 -- Closest Common Ancestors
    js跳转链接的几种方式
    vue移动端项目经验(二)
    css项目知识小汇总
    浏览器滚动条样式自定义(兼容火狐)
    媒体查询
    vue移动端项目经验
    文字溢出时省略号表示
    vue2.0-4.0的移动端及PC端屏幕大小适配
    vue移动端UI组件库
  • 原文地址:https://www.cnblogs.com/yanhowever/p/10468924.html
Copyright © 2011-2022 走看看