📜  C++ 程序检查两个链表是否相同(1)

📅  最后修改于: 2023-12-03 15:29:52.937000             🧑  作者: Mango

C++ 程序检查两个链表是否相同

两个链表相同,则对应位置的节点值都相等,链表长度也要相同。

以下是一个检查两个链表是否相同的C++程序片段:

bool isSameList(ListNode* head1, ListNode* head2)
{
    while(head1 != nullptr && head2 != nullptr)
    {
        if(head1->val != head2->val)
            return false;
        
        head1 = head1->next;
        head2 = head2->next;
    }
    
    return head1 == nullptr && head2 == nullptr;
}
参数说明

函数接收两个参数,均为指向链表头节点的指针:

bool isSameList(ListNode* head1, ListNode* head2)
运行流程

程序使用了while循环,可以遍历两个链表的每个节点,比较它们是否相等,并在运行过程中更新指向下一个节点的指针。如果两个链表的长度不同,循环将在更短的链表遍历完时终止,并返回false,否则继续遍历。当两个链表全部遍历完毕,且每一对节点都相等,则返回true。

示例

以下是一个用于测试的示例:

int main()
{
    ListNode n1(1);
    ListNode n2(2);
    ListNode n3(3);
    ListNode n4(4);
    
    ListNode m1(1);
    ListNode m2(2);
    ListNode m3(3);
    ListNode m4(4);
    
    n1.next = &n2;
    n2.next = &n3;
    n3.next = &n4;
    
    m1.next = &m2;
    m2.next = &m3;
    m3.next = &m4;
    
    cout << isSameList(&n1, &m1) << endl; // true
    
    m2.val = 5;
    
    cout << isSameList(&n1, &m1) << endl; // false
    
    m2.val = 2;
    m4.next = &m3;
    m3.next = &m2;
    
    cout << isSameList(&n1, &m1) << endl; // false
    
    return 0;
}

首先创建了两个具有相同节点值且顺序相同的链表,将它们作为参数调用isSameList函数,输出true。然后将链表m的第二个节点的值更改为5,再次执行isSameList函数,输出false。最后将链表m的末尾节点改为2,3,2,此时两条链表节点值虽然相等,但顺序不同,依然输出false。