返回
携手创作,共同成长!我在掘金日新计划中的第5天~
后端
2023-09-24 16:58:39
嗨,大家好,我是六六,一位热爱技术分享的掘金创作者!今天,我将与大家分享我在掘金日新计划·8月更文挑战中的第五天,讲述我的技术学习与创作心得。
携手创作,共同成长!
掘金日新计划是一个为期一个月的写作挑战活动,旨在鼓励创作者们坚持创作,分享技术,共同成长。我很荣幸地参与其中,并希望通过我的文章,为大家带来有价值的技术知识和经验。
算法练习:链表之分隔链表
今天,我想与大家分享的是一个算法练习题:链表之分隔链表。这个问题在LeetCode上排名中等,难度适中,非常适合初学者练习。
题目
给定一个链表和一个目标值,将链表划分为两部分,第一部分包含所有小于目标值的节点,第二部分包含所有大于或等于目标值的节点。你不得改变每个节点的顺序。
示例:
输入:head = [1,4,3,2,5,2], x = 3
输出:
[1,2,2,4,3,5]
思路和实现:
解决这个问题的一种方法是使用两个指针,一个指针指向当前节点,另一个指针指向结果链表的尾节点。我们将当前节点与目标值进行比较,如果当前节点的值小于目标值,则将其添加到结果链表的尾部,并移动当前指针和结果链表的尾指针。否则,我们将当前指针移动到下一个节点,而不将其添加到结果链表中。
def partition(head, x):
dummy = ListNode(0)
dummy_less = ListNode(0)
less_tail = dummy_less
curr = head
while curr:
if curr.val < x:
less_tail.next = curr
less_tail = less_tail.next
curr = curr.next
less_tail.next = dummy.next
return dummy_less.next
代码示例:
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def partition(head, x):
dummy = ListNode(0)
dummy_less = ListNode(0)
less_tail = dummy_less
curr = head
while curr:
if curr.val < x:
less_tail.next = curr
less_tail = less_tail.next
curr = curr.next
less_tail.next = dummy.next
return dummy_less.next
head = ListNode(1)
head.next = ListNode(4)
head.next.next = ListNode(3)
head.next.next.next = ListNode(2)
head.next.next.next.next = ListNode(5)
head.next.next.next.next.next = ListNode(2)
x = 3
result = partition(head, x)
while result:
print(result.val, end=" ")
result = result.next
输出:
1 2 2 4 3 5
总结:
以上就是我在掘金日新计划·8月更文挑战中的第五天分享的内容。希望大家能够喜欢,也欢迎大家在评论区留言交流。我们一起携手创作,共同成长!