LeetCode 86(Partition List)java

来源:互联网 发布:视频加速制作软件 编辑:程序博客网 时间:2024/05/13 12:33
原题:Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x.

You should preserve the original relative order of the nodes in each of the two partitions.

For example,
Given 1->4->3->2->5->2 and x = 3,
return 1->2->2->4->3->5.

给一个链表,将小于值x的结点放到所有大于等于值x的结点的前面,不要改变结点之间的顺序(例如1,4,3,2,5,2 将2结点提到至4的前面,但4,3,5的顺序不变);

思路:设置一个变量,记录下链表中第一次出现大于等于值x结点的位置insertPos。之后遍历链表,将所有小于值x的结点提到这个位置上;

需要注意的是,提取结点时的操作:1.当前结点的上一个结点的next指向当前结点的next;2.当前结点的next指向insertPos的next,insertPos的next指向当前结点;

链表的题目主要是考察对链表的操作,以及边界情况的处理;

代码:

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { val = x; } * } */public class Solution {    public ListNode partition(ListNode head, int x) {        ListNode preHead=new ListNode(0);        preHead.next=head;        ListNode pre=preHead;        ListNode cur=head;        ListNode insertPos=null;        while(cur!=null){            //定位需要插入的位置;            if(cur.val>=x && insertPos==null){                insertPos=pre;            }            //插入操作;            if(cur.val<x && insertPos!=null){                pre.next=pre.next.next;                cur.next=insertPos.next;                insertPos.next=cur;                insertPos=insertPos.next;                cur=pre.next;                continue;            }            pre=pre.next;            cur=cur.next;        }        return preHead.next;    }}


0 0