Day 4
题目:分隔链表
leetcode链接:分隔链表
要点:双指针
1、Java
class Solution {
public ListNode partition(ListNode head, int x) {
// 存放小于x的链表的虚拟头节点
ListNode dummy1 = new ListNode(-1);
// 存放大于等于x的链表的虚拟头节点
ListNode dummy2 = new ListNode(-1);
// p1、p2指针负责生成结果链表
ListNode p1 = dummy1;
ListNode p2 = dummy2;
// p负责遍历原链表,类似合并两个有序链表的逻辑
ListNode p = head;
while(p != null){
if(p.val < x){
p1.next = p;
p1 = p1.next;
}else{
p2.next = p;
p2 = p2.next;
}
// 断开原链表中每个节点的next指针
ListNode temp = p.next;
p.next = null;
p = temp;
}
// 连接两个链表
p1.next = dummy2.next;
return dummy1.next;
}
}
2、Python
class Solution:
def partition(self, head: Optional[ListNode], x: int) -> Optional[ListNode]:
dummy1 = ListNode(-1)
dummy2 = ListNode(-2)
p1, p2 = dummy1, dummy2
p = head
while p != None:
if p.val < x:
p1.next = p
p1 = p1.next
else:
p2.next = p
p2 = p2.next
temp = p.next
p.next = None
p = temp
p1.next = dummy2.next
return dummy1.next