版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/toward_south/article/details/89394411
题目:
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,
Given1->4->3->2->5->2and x = 3,
return1->2->2->4->3->5.
题意:
给定一个链表和一个值x,对其进行分区,使所有小于x的节点都位于大于或等于x的节点之前。
您应该保留两个分区中每个节点的原始相对顺序。
解题思路:
1.新建两个结点temp1,temp2 ,指向两个链表的头结点
2.新建两个结点cur1,cur2,指向两个结点 temp1,temp2
3.将小于X结点值的结点放入链表1中
4.将大于等于x结点值的结点放入链表2中
5.最后将两个链表连接起来
public ListNode partition(ListNode head, int x) {
if(head == null) {
return null;
}
ListNode temp1 = new ListNode(0);
ListNode cur1 = temp1;
ListNode temp2 = new ListNode(0);
ListNode cur2 = temp2;
while(head != null) {
if(head.val < x) {
cur1.next = head;
cur1 = cur1.next;
}
else {
cur2.next = head;
cur2 = cur2.next;
}
head = head.next;
}
cur1.next = temp2.next;
cur2.next = null;//链表2断开,最后结点指向null
return temp1.next;
}