【Leetcode】86. Partition List

本文介绍了一种链表分隔算法,该算法将链表中所有小于给定值x的节点置于大于或等于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.

Example:

Input: head = 1->4->3->2->5->2, x = 3
Output: 1->2->2->4->3->5

思路:
新建两个链表。l1和l2,比x小的都在l1
等于或者大于的都在l2,因为要保留原始位置吗
最后curr1.next = dummy2.next;curr2.next=null;

public ListNode partition(ListNode head, int x) {


ListNode dummy1 = new ListNode(0);
ListNode dummy2 = new ListNode(0);
ListNode curr1 = dummy1;
ListNode curr2 = dummy2;

while(head!=null){

   if(head.val<x){
       curr1.next = head;
       curr1 = head;
   }else{
       curr2.next = head;
       curr2 = head;
   }
   head = head.next;} curr2.next=null;   
 curr1.next = dummy2.next;
return dummy1.next;    
    
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值