返回

携手创作,共同成长!我在掘金日新计划中的第5天~

后端

嗨,大家好,我是六六,一位热爱技术分享的掘金创作者!今天,我将与大家分享我在掘金日新计划·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月更文挑战中的第五天分享的内容。希望大家能够喜欢,也欢迎大家在评论区留言交流。我们一起携手创作,共同成长!