写链表的时候段错误了

#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

(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;
}

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632