zoukankan      html  css  js  c++  java
  • 第86题:分隔链表

    一. 问题描述

    给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。

    你应当保留两个分区中每个节点的初始相对位置。

    示例:

    输入: head = 1->4->3->2->5->2, x = 3

    输出: 1->2->2->4->3->5

    二. 解题思路

    本题思路:采用双指针的方法进行求解,并且需要了解如何链表如何交换节点。

    步骤一:first指针指向小于目标值x的节点,而second指针指向first的下一个节点。

    步骤二:从second指针指向的节点开始遍历,找到下一个小于目标值x的节点。

    步骤三:将找到小于目标值x的节点插入到first指针的后一个节点中(百度如何交换链表节点)。将first指向first.next节点,返回步骤二。

    (在这里第三步有一个简单方法,接着将将first指向first.next节点,second指向second.next节点,继续返回步骤三,会比较简单点。)

    三. 执行结果

    执行用时 :1 ms, 在所有 java 提交中击败了88.29%的用户

    内存消耗 :35.6 MB, 在所有 java 提交中击败了57.14%的用户

    四. Java代码

    class Solution {
        public ListNode partition(ListNode head, int x) {
             
             if(head==null)
             {
                 return head;
             }
             ListNode first=new ListNode(0);
             first.next=head;
             ListNode second=first;
             ListNode result=first;
             while(second.next!=null&&first.next!=null)
             {
                 if(first.next.val<x)
                 {
                     first=first.next;
                 }else
                 {
                        second=first.next; 
                    while(second.next!=null&&second.next.val>=x)
                    {
                        second=second.next;
                    }
                    ListNode temp=second.next;
                    if(temp==null)
                    {
                        return result.next;
                    }
                    second.next=temp.next;
                    temp.next=first.next;
                    first.next=temp;
                    first=first.next;
                 }
             }
             
             return result.next;
                
        }
    }
  • 相关阅读:
    并发
    基础概念总结
    Tomcat总结
    JVM总结
    Spring事务管理
    数据结构和算法
    拦截器
    关于XML fragments parsed from previous mappers already contains value for错误的探索
    zookeeper比较好的学习地址
    关于idea中的maven打包
  • 原文地址:https://www.cnblogs.com/xiaobaidashu/p/11739740.html
Copyright © 2011-2022 走看看