鱼C论坛

 找回密码
 立即注册
查看: 1549|回复: 2

[已解决]有关于链表的问题

[复制链接]
发表于 2019-4-27 21:56:36 | 显示全部楼层 |阅读模式

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

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

x
题目大意是处理两个链表取交集;
我遇到的问题主要在于主函数的while循环,不知道为什么不正常跳出
输入样例:
1 2 5 -1
2 4 5 8 10 -1
输出样例:
2 5
#include<stdio.h>
#include<stdlib.h>
typedef struct M{
        int num;
        struct M *next;
}M ;
 M *head,*tail;
M *node()
{
        head=tail=NULL;
        M*p=head;
        p=(M*)malloc(sizeof(M));
        scanf("%d",&p->num);
        while(p->num>0)
        {
                if(head==NULL)
                        head=p;
                else
                tail->next=p;
                tail=p;
                tail->next==NULL;
                p=(M*)malloc(sizeof(M));
                scanf("%d",&p->num);
                
        }
        return head;
}

int main()
{        
        M *p,*q,*s3;
        p=node();
        q=node();
        head=tail=s3=NULL;
        int sum=0;
        
        while((p!=NULL)&&(q!=NULL))//就是这个位置,不知为什么最后链表结束后不正常跳出还会打印出地址。
        {
                if((p->num)<(q->num))
                {
                        p=p->next;
                }
                else if(p->num>q->num)
                {
                        q=q->next;
                }
                else if(p->num==q->num)
                {
                s3=(M*)malloc(sizeof(M));
                s3->num=q->num;
                if(head==NULL)
                        head=s3;
                        else
                        tail->next=s3;
                        tail=s3;
                        s3->next=NULL;
                        p=p->next;
                        q=q->next;
                        sum++;
                }
        }
        printf("%d",head->num);
        head=head->next;
        for(;head!=NULL;head=head->next)
        printf(" %d",head->num);
}
我的输出
最佳答案
2019-4-28 10:22:28
本帖最后由 jackz007 于 2019-4-28 10:24 编辑

    代码过于复杂,简单修改了一下,请楼主参考
#include<stdio.h>
#include<stdlib.h>

typedef struct M{
        int num         ;
        struct M * next ;
} node                  ;

node * link()
{
        node * p1 , * p2 , * head                                                ;
        int num                                                                  ;

        head = NULL                                                              ;
        for(;;) {
                scanf("%d" , & num)                                              ;
                if(num >= 0) {
                        if((p2 = (node *) malloc(sizeof(node))) != NULL) {
                                p2 -> num = num                                  ;
                                p2 -> next = NULL                                ;
                                if(head == NULL) head = p2                       ;
                                else p1 -> next = p2                             ;
                                p1 = p2                                          ;
                        } else {
                                fprintf(stderr , "error: failure of malloc()\n") ;
                                head = NULL                                      ;
                                break                                            ;
                        }
                } else {
                        break                                                    ;
                }
        }
        return head                                                              ;
}

int main()
{        
        node * ph , * p , * qh , * q                                                     ;
        int c                                                                            ;
        ph = link()                                                                      ;
        qh = link()                                                                      ;
        c = 0                                                                            ;
        for(p = ph ; p != NULL ; p = p -> next) {
                for(q = qh ; q != NULL ; q = q -> next) {
                        if (p -> num == q -> num) {
                            if(c) printf(" ")                                            ;
                            printf("%d" , p -> num)                                      ;
                            c ++                                                         ;
                        }
                }
        }
        if(! c) printf("no match data found!\n")                                         ;
        free(ph)                                                                         ;
        free(qh)                                                                         ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-4-27 22:01:54 | 显示全部楼层
2 5 加上三个地址12916832 12910928 12934896
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-28 10:22:28 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2019-4-28 10:24 编辑

    代码过于复杂,简单修改了一下,请楼主参考
#include<stdio.h>
#include<stdlib.h>

typedef struct M{
        int num         ;
        struct M * next ;
} node                  ;

node * link()
{
        node * p1 , * p2 , * head                                                ;
        int num                                                                  ;

        head = NULL                                                              ;
        for(;;) {
                scanf("%d" , & num)                                              ;
                if(num >= 0) {
                        if((p2 = (node *) malloc(sizeof(node))) != NULL) {
                                p2 -> num = num                                  ;
                                p2 -> next = NULL                                ;
                                if(head == NULL) head = p2                       ;
                                else p1 -> next = p2                             ;
                                p1 = p2                                          ;
                        } else {
                                fprintf(stderr , "error: failure of malloc()\n") ;
                                head = NULL                                      ;
                                break                                            ;
                        }
                } else {
                        break                                                    ;
                }
        }
        return head                                                              ;
}

int main()
{        
        node * ph , * p , * qh , * q                                                     ;
        int c                                                                            ;
        ph = link()                                                                      ;
        qh = link()                                                                      ;
        c = 0                                                                            ;
        for(p = ph ; p != NULL ; p = p -> next) {
                for(q = qh ; q != NULL ; q = q -> next) {
                        if (p -> num == q -> num) {
                            if(c) printf(" ")                                            ;
                            printf("%d" , p -> num)                                      ;
                            c ++                                                         ;
                        }
                }
        }
        if(! c) printf("no match data found!\n")                                         ;
        free(ph)                                                                         ;
        free(qh)                                                                         ;
}

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
一点都不鱼的鱼 + 5 + 5 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-3 17:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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