我用C语言写一个列表。但它不能得到最后一个数字。当数字不是0
时,程序会接受一些数字。并将数字放入列表中。这是代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct List{
int data;
struct List *next;
}List;
void initList(List **pList)
{
*pList = NULL;
}
List *createList(List *pHead)
{
List *p1, *p2;
p1 = p2 = (List *)malloc(sizeof(List));
if(p1 == NULL || p2 == NULL) {
exit(0);
}
scanf("%d", &p1->data);
p1->next = NULL;//create a node
while(p1->data != 0) {
if (pHead == NULL){
pHead = p1;
}else{
p2->next = p1;
}
p2 = p1;
p1 = (List *)malloc(sizeof(List));
scanf("%d", &p1->data);
p1->next = NULL;
}
return pHead;
}
void printList(List *pHead)
{
if(pHead == NULL){
printf("empty");
}else{
while(pHead->next != NULL){
printf("%d ", pHead->data);
pHead = pHead->next;
}
}
}
int main()
{
List *pList = NULL;
initList(&pList);
pList = createList(pList);
printList(pList);
return 0;
}
当我输入1 2 3
时,程序会返回1 2 3 4 0
。有人可以给我一些建议吗?非常感谢!
答案 0 :(得分:1)
只需检查pHead
是NULL
而不是pHead->next
。当您检查pHead->next
时,您将退出循环的顶部而不打印最后一个元素。
void printList(List *pHead)
{
if(pHead == NULL){
printf("empty");
}else{
while(pHead != NULL){
printf("%d ", pHead->data);
pHead = pHead->next;
}
}
}
答案 1 :(得分:1)
p1 = p2 = (List *)malloc(sizeof(List));
p1
和p2
指向同一位置。
此语句为List
分配内存并分配给p2
,并将相同的值分配给p1
为p1
和p2
单独分配
p1 = malloc(sizeof(List));
p2 = malloc(sizeof(List));
不需要输入类型。