|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
为什么输出跟创建的链表的内容是倒过来的?哪里的问题?要改的话怎么改?
谢谢大佬们!
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode {
int data; //数据域
struct LNode *next; //指针域
}LNode, *LinkList;
void createList(LinkList &L, int n)// 创建n个结点的链表
{
L = new LNode;
L->next = NULL;
for (int i = 0; i < n; i++)
{
LNode *p = (LNode*)malloc(sizeof(LNode));
scanf("%d", &p->data);
p->next = L->next;
L->next = p;
}
}
void printList(LinkList L) // 打印链表
{
LinkList p;
p = L->next;
while (p!=NULL)
{
printf("%d ", p->data);
L = L->next;
p = L->next;
}
}
int main() {
int n;
while (~scanf("%d", &n)) {
LinkList L;
createList(L, n);
printList(L);
}
return 0;
}
这是创建链表的方式出了问题。
你使用的是头插法,即每次新创建的节点都是放在最前面
应该用尾插法,即每次创建的新节点都放在原来链表的尾部
帮你修改了一下createList函数,并做了注释
- #include<stdio.h>
- #include<stdlib.h>
- typedef struct LNode {
- int data; //数据域
- struct LNode *next; //指针域
- }LNode, *LinkList;
- void createList(LinkList &L, int n)// 创建n个结点的链表
- {
- LNode *r;
- L=new LNode;
- r = L;//临时节点r指向L
- for (int i = 0; i < n; i++)
- {
- LNode *p = (LNode*)malloc(sizeof(struct LNode));
- scanf("%d", &p->data);
- r->next = p;//将新创建的节点放在r后面
- r = p;//r指向新创建的节点,也就是当下的尾结点
- }
- r->next=NULL;//创建结束,尾结点的next指向NULL
- }
- void printList(LinkList L) // 打印链表
- {
- LinkList p;
- p = L->next;
- while (p!=NULL)
- {
- printf("%d ", p->data);
- L = L->next;
- p = L->next;
- }
- }
- int main() {
- int n;
- while (~scanf("%d", &n)) {
- LinkList L;
- createList(L, n);
- printList(L);
- }
- return 0;
- }
复制代码
|
|