📌  相关文章
📜  删除两个单向链表中的公共节点(1)

📅  最后修改于: 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

该函数接收两个参数head1head2,分别表示两个链表的头节点。函数使用两个指针cur1cur2分别遍历两个链表。另外定义两个指针pre1pre2表示cur1cur2的前一个节点。

在遍历的过程中,判断cur1cur2节点的值是否相等,如果相等则删除这个节点。具体地,如果pre1不为空,则将pre1next指向cur1.next;同理,如果pre2不为空,则将pre2next指向cur2.next。如果要删除的节点是头节点,则需要将head1head2指向下一个节点。

最后将修改后的两个链表的头节点返回。

总结

本文介绍了如何删除两个单向链表中的公共节点。需要注意的是,如果要删除的节点是头节点,则需要修改头节点的指针。