📅  最后修改于: 2023-12-03 14:50:18.168000             🧑  作者: Mango
在进行链表操作时,有时需要删除两个单向链表中的公共节点。本文将介绍如何实现这个功能。
我们可以使用两个指针分别遍历两个链表,在遍历过程中判断节点是否相等,如果相等则删除相等节点。
class ListNode:
def __init__(self, value):
self.val = value
self.next = None
def delete_common_node(head1, head2):
cur1, cur2 = head1, head2
pre1, pre2 = None, None
while cur1 and cur2:
if cur1.val == cur2.val:
if pre1:
pre1.next = cur1.next
if pre2:
pre2.next = cur2.next
if cur1 == head1:
head1 = cur1.next
if cur2 == head2:
head2 = cur2.next
pre1 = cur1
pre2 = cur2
cur1 = cur1.next
cur2 = cur2.next
return head1, head2
该函数接收两个参数head1
和head2
,分别表示两个链表的头节点。函数使用两个指针cur1
和cur2
分别遍历两个链表。另外定义两个指针pre1
和pre2
表示cur1
和cur2
的前一个节点。
在遍历的过程中,判断cur1
和cur2
节点的值是否相等,如果相等则删除这个节点。具体地,如果pre1
不为空,则将pre1
的next
指向cur1.next
;同理,如果pre2
不为空,则将pre2
的next
指向cur2.next
。如果要删除的节点是头节点,则需要将head1
或head2
指向下一个节点。
最后将修改后的两个链表的头节点返回。
本文介绍了如何删除两个单向链表中的公共节点。需要注意的是,如果要删除的节点是头节点,则需要修改头节点的指针。