📅  最后修改于: 2023-12-03 14:49:21.917000             🧑  作者: Mango
当我们需要处理一个给定的链表时,有时候需要从链表中删除一些节点。本文将介绍一个简单的方法来删除链表中可以被给定数 K 整除的节点。
实现本算法的主要思路是遍历链表并在遍历过程中删除可以被 K 整除的节点。具体来说,我们可以使用两个指针来遍历链表,一个指针用于遍历链表,另一个指针则用于指向前一个节点,以便在删除一个节点时修改链表。
以下是本算法的 Python 实现:
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def removeNodes(head: ListNode, k: int) -> ListNode:
dummy = ListNode(0)
dummy.next = head
p = dummy
while p.next:
if p.next.val % k == 0:
p.next = p.next.next
else:
p = p.next
return dummy.next
算法的核心在于 while
循环中的条件语句。如果当前节点的值可以被 K 整除,那么我们直接跳过该节点,否则我们将指针 p 指向下一个节点。在循环结束时,我们返回链表的头部。
为了测试该算法,我们可以使用以下代码:
def printList(head):
while head:
print(head.val, end=" ")
head = head.next
print()
head = ListNode(1)
head.next = ListNode(2)
head.next.next = ListNode(3)
head.next.next.next = ListNode(4)
head.next.next.next.next = ListNode(5)
head.next.next.next.next.next = ListNode(6)
print("原链表为:")
printList(head)
head = removeNodes(head, 2)
print("新链表为:")
printList(head)
输出结果应该为:
原链表为:
1 2 3 4 5 6
新链表为:
1 3 5
本文介绍了一种简单的方法来删除链表中可以被给定数 K 整除的节点。该算法简单易懂,易于实现。如果你想进一步挑战自己,也可以试着用其他编程语言来实现它。