给定两个不带头结点单链表,请用你学过的高级语言,编写程序找出两个链表的公共结点。建议用函数实现。

C语言程序设计 数据结构
给定两个不带头结点单链表,请用你学过的高级语言,编写程序找出两个链表的公共结点。建议用函数实现。

你得说清楚,公共节点怎么定义?是节点里的值相等,还是节点的地址相同?
总之双循环遍历,逐个比较

供参考:

//【问题描述】给定两个不带头结点单链表,编写算法找出两个链表的公共结点。
//【输入形式】
//四行:

//第一行:一个数字(第一个单链表中的元素个数)

//第二行:第一个单链表中各个结点的值

//第三行:一个数字(第二个单链表中的元素个数)

//第四行:第二个单链表中各个结点的值

//【输出形式】

//两行:

//第一行:两个单链表的公共元素个数

//第二行:依次打印输出各个公共元素
//【样例输入】

//6

//12 5 8 9 -23 16

//4

//16 21 9 3
//【样例输出】

//2

//9 16

//注:若两个链表无公共元素,则输出:

//0

//无公共元素

#include <stdio.h>
#include <malloc.h>
// 链表节点结构
typedef struct Node {
    int    data;
    struct Node* next;
}Node, * LinkList;

// 输出单链表
void show(LinkList L)
{
    Node* p = L;
    while (p) {
        printf("%d ", p->data);
        p = p->next;
        if (!p) printf("\n");
    }
}

// 链表长度
int length(LinkList L)
{
    int cnt = 0;
    Node* p = L;
    while (p) {
        cnt++;
        p = p->next;
    }
    return cnt;
}

//找出两个链表的公共结点
LinkList findCommonNodes(LinkList L1, LinkList L2)
{
    Node* p1 = L1, * pL = NULL, * L = NULL;
    while (p1) {
        Node* p2 = L2;
        while (p2)
        {
            if (p1->data == p2->data) {
                Node* f = (Node*)malloc(sizeof(Node));
                f->next = NULL;
                f->data = p2->data;
                if (L == NULL)
                    L = f;
                else
                    pL->next = f;
                pL = f;
                break;
            }
            p2 = p2->next;
        }
        p1 = p1->next;
    }
    return L;
}
// 创建链表 
void createList(LinkList* L)
{
    Node* pL = NULL;
    int n, i;
    scanf("%d", &n);
    for (i = 0; i < n; i++) {// 生成链表
        Node* p = (Node*)malloc(sizeof(Node));
        p->next = NULL;
        scanf("%d", &p->data);
        if ((*L) == NULL)
           (*L) = p;
        else
           pL->next = p;
        pL = p;
    }
}
int main()
{
    LinkList L1 = NULL, L2 = NULL, L = NULL;
    createList(&L1);
    createList(&L2);
    //show(L1);
    //show(L2);
    L = findCommonNodes(L1, L2);
    if (L == NULL)
        printf("0\n无公共元素");
    else{
        printf("%d\n", length(L));
        show(L);
    }

    return 0;
}