zoukankan      html  css  js  c++  java
  • 双指针 86. 分隔链表(链表 dummyhead)

     由于之前做过不少链表的题,对这个题目可以说很快就有了思路。

    另外,链表的题不就是指针指来指去吗,这样说都算指针题了

    维护两个链表beforeEnd和afterEnd,分别指的是小数尾端和大数尾端

    另外的beforeHead和afterHead只需要最开始的时候保存一下(做一个引用)就行了

    这里又使用了常用的dummyhead技巧,首先设置一个类似索引为-1的节点,到时找只需要找dummyhead.next就行了,就算没有值,那next就是null,非常巧妙。如果这里初始设置为null的话,还要进行特判,否则会出现null.next的error

    还有个重要的点就是,要记得最后afterEnd.next=null;这点一开始忘记设置了,因为这个本来的next可能指向其他的元素。

    以下放上代码

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    class Solution {
        public ListNode partition(ListNode head, int x) {
            ListNode beforeEnd=new ListNode(-1);//小数尾端
            ListNode beforeHead=beforeEnd;//小数开头
            // ListNode P1=head;//用于遍历的指针
            ListNode afterEnd=new ListNode(-1);//大数的尾端
            ListNode afterHead=afterEnd;//大数的开头
    
            while(head!=null)
            {
                if(head.val<x)
                {
                    beforeEnd.next=head;
                    beforeEnd=head;
                    head=head.next;
                }
                else
                {
                    afterEnd.next=head;
                    afterEnd=head;
                    head=head.next;
                }
            }
            afterEnd.next=null;//这个很重要忘记设置了
            //连接起两段
            beforeEnd.next=afterHead.next;//P3可能为null,不过那也没关系。P2可能为我设的假值,不过也没关系
            return beforeHead.next;
        }
    }
  • 相关阅读:
    OpenCV教程(46) 快速特征检测
    OpenCV教程(45) harris角的检测(3)
    OpenCV教程(44) harris角的检测(2)
    OpenCV教程(43) harris角的检测(1)
    Andriod源码搜集
    OpenCV特征检测教程
    使用SGD(Stochastic Gradient Descent)进行大规模机器学习
    根据两点经纬度计算距离【转】
    转载]根据两点的经纬度求方位角和距离,等
    array
  • 原文地址:https://www.cnblogs.com/take-it-easy/p/13824960.html
Copyright © 2011-2022 走看看