题目:给定一个单链表的头节点head,节点的值类型是整型,再给定一个整 数pivot。实现一个调整链表的函数,将链表调整为左部分都是值小于pivot的 节点,中间部分都是值等于pivot的节点,右部分都是值大于pivot的节点。
思路:新建六个指针分别为小于给定值的头节点,尾节点;等于给定值的头节点,尾节点;大于给定值的头节点,尾节点。然后还需要一个next指针保存当前节点的下一个节点。
具体代码:
public ListNode listPartition(ListNode head,int target){
ListNode sH = null;
ListNode sT = null;
ListNode eH = null;
ListNode eT = null;
ListNode bH = null;
ListNode bT = null;
ListNode next = null;
while (head != null){
next = head.next;
head.next = null;
if (head.val < target){
if (sH == null){
sH = head;
sT = head;
}else {
sT.next = head;
sT = head;
}
}else if (head.val == target){
if (eH == null){
eH = head;
eT = head;
}else {
eT.next = head;
eT = head;
}
}else {
if (bH == null){
bH = head;
bT = head;
}else {
bT.next = head;
bT = head;
}
}
head = next;
}
if (sT != null){
sT.next = eH;
eT = eT == null ? sT : eT;
}
if (eT != null){
eT.next = bH;
}
return sH != null ? sH : eH == null ? bH : eH;
}
|