#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;
}
(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个节点后插入数据。
代码修改后测试结果如下:
修改后的代码:
#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;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!