LeeCode 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.

	class Node{
		private int val;
		 Node next;
		public Node(int val) {
			this.val = val;
			this.next = null;
		}
	}
	public Node partition(Node head, int x) {
		Node fakeNode1 = new Node(0);
		fakeNode1.next = head;
		Node fakeNode2 = new Node(0);
		Node p = fakeNode1;
		Node n = fakeNode2;
	    while(p.next!=null){
			if(p.next.val<x){
			Node after = p.next.next ; 
			Node cur = p.next;
				p.next  =  after;
				n.next = cur;
				n = n.next;
			}else{
				p = p.next;
			}
		}	  
		n.next = fakeNode1.next;
		return fakeNode2.next;
	}


先创建2个头指针分别指向大于x的Node节点组成的List 和小于x的Node节点组成的List的头节点

遍历时,如果遇到大于x值的直接往后移一位,如果遇到小于x值的那么就把那个小于x值的节点取出来

放入另一个List中。 p 和n 分别用来跟踪两个List的Node。结束后将他们接起来。时间复杂O(n)。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值