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

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

当两个链表的数据相同且排列方式也相同时,它们是相同的。例如,链表a(1->2->3)和b(1->2->3)是相同的。编写一个函数来检查给定的两个链表是否相同。

方法1(迭代):

对于要识别两个列表是否相同,我们需要同时遍历两个列表,遍历时需要比较数据。

// 用于检查两个链表是否相同的迭代C++程序
#include
using namespace std;
 
// 链表结构
struct Node
{
    int data;
    struct Node *next;
};
 
/* 如果链表a和b相同,则返回true,否则返回false */
bool areIdentical(struct Node *a,
                 struct Node *b)
{
    while (a != NULL && b != NULL)
    {
        if (a->data != b->data)
            return false;
 
        /* 如果到达这里,则a和b不是NULL,其数据相同in,因此在两个列表中移动到下一个节点 */
        a = a->next;
        b = b->next;
    }
 
    // 如果链表相同,则此时'a'和'b'必须为NULL。
    return (a == NULL && b == NULL);
}
 
/* 测试fun1()和fun2()的实用函数 */
/* 给定一个引用(指向指针)指向列表头和一个整数,将列表的新节点推到列表的前面 */
void push(struct Node** head_ref,
          int new_data)
{
    // 分配节点
    struct Node* new_node =
           (struct Node*) malloc(sizeof(struct Node));
 
    // 放入数据
    new_node->data = new_data;
 
    // 链接新节点的旧列表
    new_node->next = (*head_ref);
 
    // 将头移动到指向新节点
    (*head_ref) = new_node;
}
 
// 驱动程序
int main()
{
    /* 构造的链表如下:
           a: 3->2->1
           b: 3->2->1 */
    struct Node *a = NULL;
    struct Node *b = NULL;
    push(&a;, 1);
    push(&a;, 2);
    push(&a;, 3);
    push(&b;, 1);
    push(&b;, 2);
    push(&b;, 3);
 
    if(areIdentical(a, b))
        cout << "相同";
    else
        cout << "不相同";
 
    return 0;
}
// 该代码由Akanksha Rai贡献```  

输出:

相同

时间复杂度 :O(n),其中n是a和b中长度较小的列表的长度。

方法2 (递归):

递归解决方案的代码比迭代代码要更干净。但是,您可能不想在生产代码中使用递归版本,因为它将使用与列表长度成比例的堆栈空间。

// 用于检查两个链表是否相同的C ++递归函数
bool areIdentical(Node *a, Node *b)
{
    // 如果两个列表都为空
    if (a == NULL && b == NULL)
    return true;
 
    // 如果两个列表都不为空,则当前节点的数据必须匹配,对于剩下的节点也必须递归地匹配。
    if (a != NULL && b != NULL)
    return (a->data == b->data) &&
            areIdentical(a->next, b->next);
 
    // 如果到达这里,则其中一个列表为空而另一个不为空
    return false;
}
// 由rathbhupendra贡献此代码```  

时间复杂度: 无论是迭代版本还是递归版本的时间复杂度均为O(n),其中n是a和b中长度较小的列表的长度。

辅助空间: 因使用递归而导致调用栈的空间复杂度为 O(n)

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

C++ 示例