leetcode86-Partition List

题目

给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。
你应当 保留 两个分区中每个节点的初始相对位置。
示例 1:
输入:head = [1,4,3,2,5,2], x = 3
输出:[1,2,2,4,3,5]

分析

用一个指针pre始终记录最新的比x小的结点,然后用一个指针不停的往后遍历,如果发现比x大则遍历即可,如果比x小,则将该结点放到pre结点的后面即可


public class LinkNode {
	int val;
	LinkNode next;

	public LinkNode(int data) {
		this.val = data;
		this.next = null;
	}
}


public class LinkList {
	LinkNode head;
	public LinkList() {
		this.head = null;
	}
	public LinkNode getHead() {
		return this.head;
	}
	//添加元素
	public void addNode(int data) {
		LinkNode node = new LinkNode(data);
		if (this.head == null) {
			this.head = node;
		} else {
			LinkNode cur = this.head;
			while(cur.next != null) {
				cur = cur.next;
			}
			cur.next = node;
		}
	}
	//正序打印
	public void print(LinkNode node) {
		while(node != null) {
			System.out.print(node.val);
			System.out.print(" ");
			node = node.next;
		}
		System.out.println();
	}
	public void swap(int x) {
		LinkNode dummy = new LinkNode(-1);
		dummy.next = this.head;
		LinkNode pre = dummy;
		while(pre.next != null && pre.next.val < x) {
			pre = pre.next;
		}
		LinkNode cur = pre.next;
		while(cur != null && cur.next != null) {
			if(cur.next.val < x) {
				LinkNode p = cur.next;
				cur.next = p.next;
				p.next = pre.next;
				pre.next = p;
				pre = pre.next;
			} else {
				cur = cur.next;
			}
		}
		print(dummy.next);
	}
}

public class partitionList {
	public static void main(String[] args) {
		LinkList list = new LinkList();
		list.addNode(1);
		list.addNode(4);
		list.addNode(3);
		list.addNode(2);
		list.addNode(5);
		list.addNode(2);
		list.swap(3);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值