原题
https://leetcode.cn/problems/partition-list/description/
思路
双指针
复杂度
时间:O(n)
空间:O(1)
Python代码
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def partition(self, head: Optional[ListNode], x: int) -> Optional[ListNode]:
# 虚拟节点, p1指向小节点, p2指向大节点
dummy1 = p1 = ListNode(-1, head)
dummy2 = p2 = ListNode(-1, head)
while head:
if head.val < x:
p1.next = head
p1 = p1.next
else:
p2.next = head
p2 = p2.next
head = head.next
p2.next = None
p1.next = dummy2.next
return dummy1.next
Go代码
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func partition(head *ListNode, x int) *ListNode {
// 虚拟节点, p1指向小节点, p2指向大节点
dummy1 := &ListNode{-1, head}
dummy2 := &ListNode{-1, head}
p1 := dummy1
p2 := dummy2
for head != nil {
if head.Val < x {
p1.Next = head
p1 = p1.Next
} else {
p2.Next = head
p2 = p2.Next
}
head = head.Next
}
p2.Next = nil
p1.Next = dummy2.Next
return dummy1.Next
}
758

被折叠的 条评论
为什么被折叠?



