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

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

C++编程中,经常需要判断两个链表是否相同。两个链表相同指的是它们具有相同的长度,并且对应位置上的元素也相同。本文将介绍如何编写一个C++程序来检查两个链表是否相同。

算法介绍

检查两个链表是否相同的基本算法是遍历这两个链表,逐一比较它们对应位置上的元素。如果它们长度和元素都相同,则这两个链表就是相同的。算法的时间复杂度是O(n),其中n是链表的长度。

下面是基于这个算法的C++程序示例:

#include <iostream>
using namespace std;

//链表节点结构体定义
struct ListNode {
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {} //构造函数
};

//检查两个链表是否相同的函数
bool isSameList(ListNode *p, ListNode *q) {
    while(p && q){
        if(p->val != q->val)
            return false;
        p = p->next;
        q = q->next;
    }
    return !p && !q;
}

函数isSameList的参数是两个链表的头节点。函数返回值是一个bool类型的值,表示这两个链表是否相同。

在函数isSameList中,我们使用了while循环遍历这两个链表。当两个链表中至少有一个已经遍历完时,循环结束。在循环遍历的过程中,每次比较这两个链表对应位置上的元素。如果它们不相同,则这两个链表就不相同,并可以立即返回false。否则继续遍历这两个链表,直到两个链表均被遍历完。最后,如果两个链表均已被遍历完,且没有发现不相同的元素,则这两个链表就是相同的。

实例演示

下面是函数isSameList的测试代码:

int main() {
    //建立第一个链表: 1->2->3->NULL
    ListNode *p = new ListNode(1);
    p->next = new ListNode(2);
    p->next->next = new ListNode(3);

    //建立第二个链表: 1->2->3->NULL
    ListNode *q = new ListNode(1);
    q->next = new ListNode(2);
    q->next->next = new ListNode(3);

    //检查两个链表是否相同
    bool result = isSameList(p, q);

    //输出结果
    cout << "The result is: " << (result ? "True" : "False") << endl;
    return 0;
}

上述测试代码创建了两个链表,它们均包含三个元素,且这两个链表的元素都是相同的。程序调用了函数isSameList来判断这两个链表是否相同。在这个例子中,函数isSameList应该返回true。程序最后输出The result is: True,表示这两个链表是相同的。

结论

本文介绍了如何编写C++代码来检查两个链表是否相同。通过遍历这两个链表并比较它们对应位置上的元素,我们可以很快得到这两个链表是否相同。这个算法的时间复杂度是O(n),其中n是链表的长度。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

C++ 示例