C语言链表输。数据输入完成了,输出的时候只能输出最后一个,求指导:)

如题所述

能把完整代码,发出来,不要发图片的那种,我好调试

简单看了一下,你这个t1就是最后了,你应该定义一个中间变量,使得这个t1不要动才对

给你改了 

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct Node
{
int data;
struct node *next;
}LNode,*LinkList;
void main()
{
LinkList t1;
LinkList t;  //这里定义一个中间变量
LinkList s1,s;
int length_1,i;
int data;
printf("请输入单链表1的长度:\n");
scanf("%d", &length_1);
t1 = (LinkList)malloc(sizeof(LNode));
t = t1;
t1->next = NULL;

for (i = 0; i < length_1; i++)
{
printf("请输入第%d个数据:\n", i);
scanf("%d", &data);
s1 = (LinkList)malloc(sizeof(LNode));
s1->data = data;
s1->next = NULL;
t->next = s1;
t = s1;
}
printf("链表的1的内容为:\n");
s = t1->next;
while (s)
{
printf("%d ", s->data);
s = s->next;
}
printf("\n");



system("pause");
return 0;


}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-10-16

链表一般我是这样写的: 供参考

#include <stdio.h>
#include <stdlib.h>

struct node
{
int data;
struct node *next;
};

int main(int argc, char *argv[]) 
{
struct node *p=NULL;      //当前链表位置 
struct node *head=NULL;   //链表头 
struct node *body=NULL;   //链表结点 
while(1)
{
int n;
fflush(stdin);      //清空键盘缓冲区 
scanf("%d",&n);     //接受数据 
if(n==-1)           //如果输入为-1则表示结束输入 
{                   //n也可以在while()中判断,不过我认为这样写逻辑更清楚
break;          //退出循环 
}
body=(struct node*)malloc(sizeof(struct node));
body->data=n;
body->next=NULL;
if(head==NULL)      //如果头为空则赋给头结点 
{
head=body;
p=body;     //并把当前链表位置指向头结点
}
else                //头不为空 
{
p->next=body;
p=body;     //移动链表当前位置
}
}
p=head;                 //位置指向头 
int i=1;
while(p!=NULL)
{
printf("\n链表%d的内容为:%d",i++,p->data);
p=p->next;
}
return 0;
}

第2个回答  2016-10-15
你输出的是链表的最后一个数据。完整代码贴出来比较好
相似回答