📅  最后修改于: 2023-12-03 15:29:52.937000             🧑  作者: Mango
两个链表相同,则对应位置的节点值都相等,链表长度也要相同。
以下是一个检查两个链表是否相同的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。