CJCZRX 2022-03-12 15:05 采纳率: 100%
浏览 19
已结题

写链表的时候段错误了

#include <bits/stdc++.h>
using namespace std;

typedef struct List_Node{
    int date;
    struct List_Node * Next;
}List_Node,*ListNode;

//创建空表
ListNode creatList(){
    ListNode head; //创建头结点 
    head = NULL; //创建空表,表中无元素,所以头结点直接指向空
    return head; //返回头结点
}

//在第n个结点的后面添加结点,数据为x
void insert(ListNode head,int n,int x){
    ListNode p = head;
    int num = 0;
    while(num != n && p->Next == NULL){
        num ++;
        p = p->Next;
    }
    if(num == n){
        ListNode s  = (ListNode) malloc (sizeof(List_Node));
        s->date = x;
        s->Next = p->Next;
        p->Next = s;
    }
}

//遍历整个链表
void ergodic(ListNode head){
    while(head->Next != NULL){
        head = head->Next;
        cout << head->date << ends;
    }
}

int main()
{ 
    ListNode head = creatList();
    int n,x;
    cin >> n >> x;
    insert(head,n,x);
    cout << x << n;
    ergodic(head);
    return 0;
}

img

  • 写回答

2条回答 默认 最新

  • 关注

    (1)你的creatList函数中没有创建链表啊。代码修改如下:

    //创建空表
    ListNode creatList(){
        ListNode head = (ListNode) malloc (sizeof(List_Node)); 
        head->Next = NULL;
        //head = NULL; //创建空表,表中无元素,所以头结点直接指向空
        return head; //返回头结点
    }
    
    

    (2)insert函数中,while循环的条件写错了,while(num != n && p->Next == NULL) 应该是 while(num != n && p->Next != NULL)
    (3)insert函数中,num从1开始
    (4)你的代码中链表只有1个节点,只能在第1个节点后插入数据。
    代码修改后测试结果如下:

    img

    修改后的代码:

    #include <bits/stdc++.h>
    
    using namespace std;
    
    typedef struct List_Node{
        int date;
        struct List_Node * Next;
    }List_Node,*ListNode;
    
    //创建空表
    ListNode creatList(){
        ListNode head = (ListNode) malloc (sizeof(List_Node)); 
        head->Next = NULL;
        //head = NULL; //创建空表,表中无元素,所以头结点直接指向空
        return head; //返回头结点
    }
    
    //在第n个结点的后面添加结点,数据为x
    void insert(ListNode head,int n,int x){
        ListNode p = head;
        int num = 1;//这里从1开始
        while(num != n && p->Next != NULL){
            num ++;
            p = p->Next;
        }
        if(num == n){
            ListNode s  = (ListNode) malloc (sizeof(List_Node));
            s->date = x;
            s->Next = p->Next;
            p->Next = s;
        }
    }
    
    //遍历整个链表
    void ergodic(ListNode head){
        ListNode p = head->Next;
        while(p != NULL){
            //head = head->Next;
            cout << p->date << ends;
            p = p->Next;
        }
    }
    
    int main()
    { 
        ListNode head = creatList();
        int n,x;
        cin >> n >> x;
        insert(head,n,x);
        //cout << x << n; //这一句没用
        ergodic(head);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月20日
  • 已采纳回答 3月12日
  • 创建了问题 3月12日

悬赏问题

  • ¥15 phython如何实现以下功能?查找同一用户名的消费金额合并—
  • ¥15 孟德尔随机化怎样画共定位分析图
  • ¥18 模拟电路问题解答有偿速度
  • ¥15 CST仿真别人的模型结果仿真结果S参数完全不对
  • ¥15 误删注册表文件致win10无法开启
  • ¥15 请问在阿里云服务器中怎么利用数据库制作网站
  • ¥60 ESP32怎么烧录自启动程序
  • ¥50 html2canvas超出滚动条不显示
  • ¥15 java业务性能问题求解(sql,业务设计相关)
  • ¥15 52810 尾椎c三个a 写蓝牙地址