LeetCode Partition List

本文详细阐述了如何通过两个指针实现链表分区,将所有小于指定值的节点置于链表前部,其余节点置于后部,同时保持相对顺序不变。

Description:

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.

Solution:

还是两个指针,一个记录小于x,一个记录大于等于x。

import java.util.*;

public class Solution {
	public ListNode partition(ListNode head, int x) {
		ListNode smallerHead = null, biggerHead = null;
		ListNode smallerTot = smallerHead, biggerTot = biggerHead;
		ListNode temp = head, neo, next;

		while (temp != null) {
			next = temp.next;
			temp.next = null;
			if (temp.val < x) {
				if (smallerHead == null) {
					smallerHead = temp;
					smallerTot = temp;
				} else {
					smallerTot.next = temp;
					smallerTot = smallerTot.next;
				}
			} else {
				if (biggerHead == null) {
					biggerHead = temp;
					biggerTot = temp;
				} else {
					biggerTot.next = temp;
					biggerTot = biggerTot.next;
				}
			}
			temp = next;
		}

		if (smallerHead == null)
			return biggerHead;
		else {
			smallerTot.next = biggerHead;
			return smallerHead;
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值