链表方面一直不是特别清楚。自己编了个链表,但却无法正确输出,求大神帮忙
#include
#include
typedef struct lnode Lnode;
struct lnode
{
int data;
Lnode *next;
};
Lnode *makeNode(int data)
{
Lnode *new_node=(Lnode *)malloc(sizeof(Lnode));
if(new_node==NULL)
{ printf("error");
exit(1);
}
else
{ new_node->data=data;
new_node->next=NULL;
}
return(new_node);
}
Lnode *insert(Lnode *new_node,Lnode *head)
{
Lnode *pre_node=NULL;
if(pre_node==NULL)
{
head=new_node;
pre_node=head;
}
else
{
pre_node->next=new_node;
pre_node=pre_node->next;
}
return(head);
}
void printlist(Lnode *head)
{
Lnode *node=head;
while(node!=NULL)
{
printf("%c",node->data);
node = node->next;
}
printf("\n");
}
int main()
{
Lnode *list=NULL;
Lnode *node;
int ch;
while(ch=getchar()!=EOF)
{
if(ch=='\n')
{
printlist(list);
}
else
{
list=insert(makeNode(ch),list);
}
}
return 0;
}
insert函数第一行代码赋值为空,紧接着又判断是否为空?如果这一行不是错误,那么意图是什么?
#include<stdio.h>
typedef struct lnode Lnode;
struct lnode{
int data;
Lnode *next;
};
Lnode *makeNode(){
Lnode *head, *new_node;// head相当于你的list
char ch;
head = NULL;
printf("依次输入字符数据(‘#’表示输入结束):\n");
ch = getchar();
while(ch != '#')
{
new_node = (Lnode*)malloc(sizeof(Lnode));
new_node->data = ch;
new_node->next = head;
head = new_node;
ch = getchar(); //头插法算法简单 核心就两句p->next = head;head = p;
}
return head;
// Lnode *new_node=(Lnode *)malloc(sizeof(Lnode));
// if(new_node==NULL){
// printf("error");
// exit(1);
// }
// new_node->data=data;
// new_node->next=NULL;
// return(new_node);
}
Lnode *insert(Lnode *new_node,Lnode *head){
Lnode *pre_node=NULL;
if(pre_node==NULL){
head=new_node;
pre_node=head;
}
pre_node->next=new_node;
pre_node=pre_node->next;
return(head);
}
void printlist(Lnode *head){
Lnode *node=head;
while(node!=NULL){
printf("%c",node->data);
node = node->next;
}
printf("\n");
}
int main(){
Lnode *list=NULL;
//Lnode *node;
int ch;
while(1)
{
printf("单链表的创建\n");
printf("1.使用头插法创建单链表\n");
printf("2.使用尾插法创建单链表\n");
printf("3.链表输出显示\n");
printf("4.退出\n");
printf("做出选择:\n");
scanf("%d",&ch);
switch(ch)
{
//头插法
case 1:
list = makeNode(); // 直接把新节点就挂到链表上了。。
break;
//尾插法
case 2:
printf("你自己实现!");
//输出链表
case 3:
printlist(list);
break;
//退出程序
case 4:
return 0;
break;
default:
break;
}
}
// while(ch=getchar()!=EOF){
//printf("hahahha");
// if(ch=='\n'){
// printf("hhhh");
// printlist(list);
// }
// else{
// list=insert(makeNode(ch),list);
// }
// }//while
// return 0;
}
你理解有问题。。改好了。。