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

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

检查两个链表是否相同

在编写程序时,有时候需要检查两个链表是否相同,也就是说两个链表中的元素是否完全相同。本篇文章将介绍一种C程序来检查两个链表是否相同。

链表的定义

在编写C程序之前,需要先定义链表的结构。链表结构可以使用结构体来表示,如下所示:

typedef struct ListNode {
    int val;
    struct ListNode *next;
} ListNode;

其中,val表示链表节点的值,next表示指向下一个节点的指针。

检查两个链表是否相同的思路

本程序的思路是:先比较两个链表的长度是否相同,如果长度相同,则开始逐一比较两个链表的每个节点,如果每个节点的值都相等,则认为两个链表相同。

具体实现过程如下:

  1. 先用两个指针pq分别指向两个链表的头节点。
  2. 分别遍历两个链表,统计它们的长度。
  3. 如果长度不相等,则两个链表一定不相同,直接返回false
  4. 如果长度相等,则分别逐一比较两个链表的每个节点的值是否相等。
  5. 如果每个节点的值都相等,则两个链表相同,返回true
C程序实现
bool isSameList(ListNode* l1, ListNode* l2) {
    // 先用两个指针p和q分别指向两个链表的头节点
    ListNode* p = l1;
    ListNode* q = l2;

    // 分别遍历两个链表,统计它们的长度
    int len1 = 0;
    int len2 = 0;
    while (p != NULL) {
        len1++;
        p = p->next;
    }
    while (q != NULL) {
        len2++;
        q = q->next;
    }

    // 如果长度不相等,则两个链表一定不相同,直接返回false
    if (len1 != len2) {
        return false;
    }

    // 如果长度相等,则分别逐一比较两个链表的每个节点的值是否相等
    p = l1;
    q = l2;
    while (p != NULL && q != NULL) {
        if (p->val != q->val) {
            return false;
        }
        p = p->next;
        q = q->next;
    }

    // 如果每个节点的值都相等,则两个链表相同,返回true
    return true;
}

以上就是本篇文章介绍的C程序,它能够检查两个链表是否相同。如果要使用该程序,请将上述代码拷贝到你的C程序中。