Leetcode 86. Partition List(链表划分)

来源:互联网 发布:淘宝上怎么联系卖家 编辑:程序博客网 时间:2024/05/29 10:55

题目描述

给定链表和整型值x,将小于x的结点放到链表左边,大于x的结点放到链表右边。

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的结点插入到右链表的尾部,然后将左链表的尾结点指向右链表的头结点,然后返回左链表的头结点。

代码实现

/** * 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) {        if (head == null || head.next == null) {            return head;        }        ListNode leftHead = new ListNode(0);//左链表的头结点        ListNode leftTail = leftHead;//左链表的尾结点        ListNode rightHead = new ListNode(0);//右链表的头结点        ListNode rightTail = rightHead;//右链表的尾结点        ListNode p = head;        while (p != null) {            if (p.val < x) {                leftTail.next = p;                leftTail = leftTail.next;            } else {                rightTail.next = p;                rightTail = rightTail.next;            }            p = p.next;        }        //将左链表的尾结点指向右链表的头结点        leftTail.next = rightHead.next;        //将右链表的尾结点的下一个结点置为空        rightTail.next = null;        //返回新的头结点        return leftHead.next;    }}
1 0
原创粉丝点击