鱼C论坛

 找回密码
 立即注册
查看: 2083|回复: 1

c语言链表问题

[复制链接]
发表于 2020-3-4 22:49:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
#include<stdlib.h>
struct student {
        int n;
        struct student* next;
};
int number;
struct   student  *a() //创建未知链表;
{
           struct student* p, * head,*q;
           p = (student*)malloc(sizeof(student));
           head = p;
           char k;

           for (int i = 0;; i++)
           {
                   if ((i == 0) && ((k = getchar()) == '\n'))
                   {
                           p=NULL;
                           break;
                   }
                   else if (i == 0)
                   {
                           p->n = (int)(k-'0');
                           q = (student*)malloc(sizeof(student));
                           p->next = q;
                           p = q;
                   }
                   else
                   {  
                           scanf_s("%d", &(p->n));
                           if ((k = getchar()) == '\n')
                           {
                                   p->next = NULL;
                                   break;
                           }
                           else
                           {
                                   q = (student*)malloc(sizeof(student));
                                   p->next = q;
                                   p = q;
                                   number++;
                           }
                   }
           }
           return head;
}

   int main()
   {
           struct student*p,*q;
           void print(struct student * p,struct student * q);
           p = a();
           q = a();
           if ((p == NULL) ||(q == NULL))
                   printf("NULL");
           else
                   print(p, q);
           return 0;
   }
   void print(struct student* p,struct student* q)//打印两个链表的交集;
   {
           struct  student* q1 = q, * p1 = p;
           for (int i = 0;; i++)
           {
                   if (p->next != NULL)
                   {
                           if ((p->n) == (p->next->n))
                                   p = p->next;
                   }
                   for (int j = 0;; j++)
                   {
                           if (q->next != NULL)
                           {
                                   if ((q->n) == (q->next->n))
                                           q = q->next;
                           }
                           if (p->n == q->n)
                           {

                                   printf("%d ", p->n);
                                   q = q1;
                                   break;
                           }
                           else
                           {
                                   if (q->next == NULL)
                                   {
                                           q = q1;
                                           break;
                                   }
                                   else
                                           q = q->next;

                           }

                   }
                   if (p->next == NULL)
                           break;
                   else
                           p = p->next;
           }
   }
这个程序在使其中一个或两个链表为NULL时报错,不知道怎么回事,求大佬帮忙!O.O
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-4 22:50:29 | 显示全部楼层
这个是问题求两个非降序单链表的交集,例如将单链表1->2->2->3 和 2->2->3->3->5->7 的交集产生新单链表 2->3,只能输出结果,不能修改两个单链表的数据。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-15 23:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表