YING_ZHOU 2020-03-06 18:53 采纳率: 0%
浏览 98

C语言链表新手 求大佬解决 链表不循环而且也不出去

void sort(struct people *head)
{
struct people *p1,*p2,*p3;

for( p1=head, p2=p1->next;p2!=NULL;p1=p1->next,p2=p2->next)
    if(strcmp((p1->name),(p1->next->name))>0)
    {
        p3=p1;
        p1=p2;
        p2=p3;
        printf("%s",p1->name);
        printf("%s",p2->name);
    }

}

  • 写回答

1条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-07-25 18:49
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    这段代码中存在一些问题,让我们逐个来看:
    1. 缺少变量声明:在函数内部应该首先声明两个用于循环的指针变量p1和p2,还有一个临时指针变量p3。
    2. 遍历链表条件错误:当前代码中的for循环条件是p2!=NULL,然而当p2等于NULL时,循环体内却尝试访问p1->next(即NULL->next),这会导致空指针异常。正确的条件应该是p2->next!=NULL。
    3. 排序逻辑错误:当前代码中的比较语句只做了简单的交换操作,它没有修改链表中节点的指向关系,也没有考虑到边界情况。应该对节点进行交换而不是指针。 下面是经过修改后的代码示例:
    void sort(struct people *head) {
        struct people *p1, *p2, *p3;
        for (p1 = head; p1 != NULL; p1 = p1->next) {
            for (p2 = p1->next; p2 != NULL; p2 = p2->next) {
                if(strcmp(p1->name, p2->name) > 0) {
                    // 交换两个节点的数据
                    char temp[50]; // 假设name字段最长不超过50个字符
                    strcpy(temp, p1->name);
                    strcpy(p1->name, p2->name);
                    strcpy(p2->name, temp);
                }
            }
        }
    }
    

    请注意,上述代码仅演示了根据姓名排序链表的功能,实际项目中可能需要根据实际需求对函数进行必要的修改。

    评论

报告相同问题?

悬赏问题

  • ¥15 关于将inet引入的相关问题
  • ¥15 关于一个倒计时的操作和显示设计
  • ¥15 提问STK的问题,哪位航天领域的同学会啊
  • ¥15 苹果系统的mac m1芯片的笔记本使用ce修改器使用不了
  • ¥15 单相逆变的电压电流双闭环中进行低通滤波PID算法改进
  • ¥15 关于#java#的问题,请各位专家解答!
  • ¥15 如何卸载arcgis 10.1 data reviewer for desktop
  • ¥15 共享文件夹会话中为什么会有WORKGROUP
  • ¥15 关于#python#的问题:使用ATL02数据解算光子脚点的坐标(操作系统-windows)
  • ¥115 关于#python#的问题:未加密前两个软件都可以打开,加密后只有A软件可打开,B软件可以打开但读取不了数据