单链表添加元素失败,无法正常输出结果
#include
#include
typedef int DataType;
typedef struct node{
DataType data;
struct node *link;
}Node;
Node* initLinkList(){
//创建头节点(无元素)
Node* head=(Node*)malloc(sizeof(Node));
if(head==NULL){
return NULL;
}
head->link=NULL;
return head;
}
void addNode(Node* h,DataType ele){
if(h==NULL){
printf("链表未初始化\n");
return;
}
if(h->link==NULL){
printf("你好\n");
Node* newNode=(Node*)malloc(sizeof(Node));
newNode->data=ele;
newNode->link=h->link;
h->link=newNode;
}
}
void ergodic(Node *h){
while(h->link!=NULL){
printf("%d\n",h->data);
}
}
int main(){
Node * headNode=initLinkList();
addNode(headNode,20);
ergodic(headNode);
return 0;
}
修改处见注释,供参考:
#include <stdio.h>
#include <stdlib.h>
typedef int DataType;
typedef struct node{
DataType data;
struct node *link;
}Node;
Node* initLinkList(){
//创建头节点(无元素)
Node* head=(Node*)malloc(sizeof(Node));
if(head==NULL){
return NULL;
}
head->link=NULL;
return head;
}
void addNode(Node* h,DataType ele){
if(h==NULL){
printf("链表未初始化\n");
return;
}
//if(h->link==NULL){ 修改,这个判断加上只能实现加入一个结点
//printf("你好\n");
Node* newNode=(Node*)malloc(sizeof(Node));
newNode->data=ele;
newNode->link=h->link;
h->link=newNode;
//} //修改
}
void ergodic(Node *h){
while(h->link!=NULL){
printf("%d\n",h->link->data);//printf("%d\n",h->data);修改
h = h->link; // 修改
}
}
int main(){
Node * headNode=initLinkList();
addNode(headNode,20);
addNode(headNode,30);
addNode(headNode,40);
ergodic(headNode);
return 0;
}
输出死循环了。循环中加h=h->link;
31行等号后面改为NULL
31 行,这里死循环:
newNode->link=h->link;
h->link=newNode;