[LeetCode]Partition List

题目描述

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.


解题思路:


对于链表,除了前一篇<Reverse Linked List II>中说的设定一个front节点,这里还有一个技巧:随意的建立多个链表.这么说是因为建立一个新的链表只需要建立一个头元素,之后所做的事情无非就是把原来链表的元素根据条件移到不同的新链表中去.

那么针对这题,我们新开两个链表(其实就是头元素),分别表示比x小的链表以及比x大或者等于的链表,每次从原来链表上摘取一个ListNode,根据条件放到不同的链表中去,最后只要将两个链表头尾相连就好.


解题代码:


 public ListNode partition(ListNode head, int x) {
        ListNode p=new ListNode(0);//p指的是比x小的链表的最后一个元素
        ListNode pFront=p;//pfront的下一个节点是比x小的链表的头元素.
        ListNode q=new ListNode(0);//q指的是比x大的链表最后一个元素
        ListNode qFront=q;//同理
        ListNode r=new ListNode(0);//r用来遍历原链表
        ListNode rFront=r;
        r.next=head;//为了保持前驱节点,还是像之前所说的用r.next判断
        while(r.next!=null)
        {
            if(r.next.val<x)//把r.next摘下来放到p后面,同时更新p
            {
                ListNode rnn=r.next.next;
                r.next.next=p.next;
                p.next=r.next;
                p=p.next;
                r.next=rnn;
            }else//把r.next摘下来放到q后面,同时更新q
            {
                ListNode rnn=r.next.next;
                r.next.next=q.next;
                q.next=r.next;
                q=q.next;
                r.next=rnn;
            }
        }
        p.next=qFront.next;//把p q头尾相连
        return pFront.next;//返回p的头元素
    }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值