LeetCode 第86题描述如下:
黄哥用二种思路去解决这个问题,Python3 代码用的是二个栈,将小的数字放到一个栈中,大的数字放到一个栈中,再依次出栈,尾部插入到新的链表中。
Go 语言代码是遍历原来的链表二次,第一个循环将小于x的值插入到新的链表尾部,第二个循环将大于或等于x的值,插入到新的链表尾部。
Python3 代码
# 黄哥Python培训 黄哥所写
class Solution:
def partition(self, head: ListNode, x: int) -> ListNode:
if head is None:
return None
stack1 = []
stack2 = []
curr = head
while curr:
if curr.val < x:
stack1.append(curr.val)
else:
stack2.append(curr.val)
curr = curr.next
if stack2:
newHead = ListNode(stack2.pop())
elif stack1:
newHead = ListNode(stack1.pop())
while stack2:
node = ListNode(stack2.pop())
node.next = newHead
newHead = node
while stack1:
node = ListNode(stack1.pop())
node.next = newHead
newHead = node
return newHead下面是Go 语言代码
// 黄哥Python培训 黄哥所写
func partition(head *ListNode, x int) *ListNode {
if head == nil {
return nil
}
var newHead *ListNode
curr1, curr2 := head, head
newHead = &ListNode{}
first := newHead
for curr1 != nil {
if curr1.Val < x {
node := &ListNode{
Val: curr1.Val,
}
first.Next = node
first = node
}
curr1 = curr1.Next
}
for curr2 != nil {
if curr2.Val >= x {
node := &ListNode{
Val: curr2.Val,
}
first.Next = node
first = node
}
curr2 = curr2.Next
}
return newHead.Next
}