sti.h下:
#include
#include
typedef struct node
{
int date;
struct node* next; //指向下一个节点的指针
}NODE;
NODE* head = NULL; //定义头指针
NODE* creatlist();
NODE* creatNode();
void printflist(NODE* headnode);
void insertnode(NODE* headnode, int date);
#include"sti.h"
int main()
{
NODE* list = creatlist();
insertnode(list, 1);
insertnode(list, 2);
insertnode(list, 3);
printflist(list);
return 0;
}
NODE* creatNode(int date)
{
NODE* newnode = (NODE*)malloc(sizeof(NODE));
newnode->date = date;
newnode->next = NULL;
return newnode;
};
NODE* creatlist() //创建新结点或说创建链表
{
NODE* newnode = (NODE*)malloc(sizeof(NODE)); //创建新结点
newnode->next = NULL; //让newnode这个结点指向空
return newnode;
}
void insertnode(NODE* headnode, int date) //插入结点,参数:所要插入的链表,所要插入的结点的数据
{
NODE* newnode = creatlist(); //创建插入的结点
headnode->next = newnode; //newnode放在headnode后面
newnode->next = headnode->next; //newnode放在headnode->next后面
}
void printflist(NODE * headnode) //打印结点
{
NODE * pmove= headnode->next;
while (pmove)
{
printf("%d", pmove->date);
pmove = pmove->next;
}
printf("\n");
}
执行时是死循环,怎么修改?
该回答引用GPTᴼᴾᴱᴺᴬᴵ
在你的代码中,insertnode函数中创建了新的节点,但是并没有设置新节点的数据,导致每次插入新节点时,新节点的数据域都是随机值,所以程序会一直输出无限个随机数。另外,insertnode函数中的链表插入逻辑也有问题。
以下是修改后的代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int data;
struct node* next; //指向下一个节点的指针
}NODE;
NODE* creatNode(int data)
{
NODE* newnode = (NODE*)malloc(sizeof(NODE));
newnode->data = data;
newnode->next = NULL;
return newnode;
}
NODE* creatList() //创建新结点或说创建链表
{
NODE* head = creatNode(0);
return head;
}
void insertNode(NODE* headnode, int data) //插入结点,参数:所要插入的链表,所要插入的结点的数据
{
NODE* newnode = creatNode(data); //创建插入的结点
newnode->next = headnode->next; //让newnode指向headnode的下一个结点
headnode->next = newnode; //headnode指向newnode
}
void printList(NODE * headnode) //打印链表
{
NODE * pmove= headnode->next;
while (pmove)
{
printf("%d ", pmove->data);
pmove = pmove->next;
}
printf("\n");
}
int main()
{
NODE* head = creatList();
insertNode(head, 1);
insertNode(head, 2);
insertNode(head, 3);
printList(head);
return 0;
}
修改的主要内容包括:
这样就可以正确地输出链表中的元素了。
以下答案引用自GPT-3大模型,请合理使用:
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int date;
struct node* next; //指向下一个节点的指针
}NODE;
NODE* head = NULL; //定义头指针
NODE* creatlist();
NODE* creatNode();
void printflist(NODE* headnode);
void insertnode(NODE* headnode, int date);
#include"sti.h"
int main()
{
NODE* list = creatlist();
insertnode(list, 1);
insertnode(list, 2);
insertnode(list, 3);
printflist(list);
return 0;
}
NODE* creatNode(int date)
{
NODE* newnode = (NODE*)malloc(sizeof(NODE));
newnode->date = date;
newnode->next = NULL;
return newnode;
};
NODE* creatlist() //创建新结点或说创建链表
{
NODE* newnode = (NODE*)malloc(sizeof(NODE)); //创建新结点
newnode->next = NULL; //让newnode这个结点指向空
return newnode;
}
void insertnode(NODE* headnode, int date) //插入结点,参数:所要插入的链表,所要插入的结点的数据
{
NODE * curr = NULL;
NODE* newnode = creatNode(date); //创建插入的结点
curr = headnode;
while(curr->next != NULL) // 找到链表最后一个结点
{
curr = curr->next;
}
curr->next = newnode; //将newnode链接到链表的尾部
newnode->next = NULL;
}
void printflist(NODE * headnode) //打印结点
{
NODE * pmove= headnode->next;
while (pmove !=NULL)
{
printf("%d", pmove->date);
pmove = pmove->next;
}
printf("\n");
}
如果我的回答解决了您的问题,请采纳我的回答