【发布时间】:2013-08-01 12:18:41
【问题描述】:
我正在尝试学习链表。我有一点点麻烦。我已经学习了一些基本概念。例如阅读列表中的数字,如下所示:我的问题是:
- 谁能给我一些关于如何改进此代码的提示?我知道这很混乱。
- 如果我要反转这个链表(保持地址和内容相同)但操纵指针。
我该怎么做?我不想要完整的解决方案,只是一些提示。如果有人可以为我绘制任何关于如何反转链表的图表,将不胜感激。
#include <stdio.h>
#include <stdlib.h>
struct node {
int data;
struct node *next;
};
int main (int argc, char *argv[]){
struct node *pNew, *pHead, *pCurr;
int i, dataEntered, numberOfNodes;
printf("Please enter the amount of nodes: ");
scanf("%d", &numberOfNodes);
for (i = 0; i < numberOfNodes; i++){
printf("Enter data for node %d : ", numberOfNodes-i);
scanf("%d", &dataEntered);
pNew = malloc (sizeof(struct node));
pNew -> data = dataEntered;
pNew -> next = pHead;
pHead = pNew;
}
pCurr = pHead;
for (i = 0; i < numberOfNodes; i++){
printf("Node %d has a data value of: %d\n", i, pCurr->data);
pCurr = pCurr->next;
}
return 0;
}
【问题讨论】:
-
关于reverse linked list的现有问题都没有帮助吗?
-
你需要初始化pHead。
struct node *pNew, *pHead=NULL, *pCurr; -
学习这些东西的诀窍是把它分解成尽可能小的步骤。你知道如何(1)做一个空列表,(2)测试看看如果列表为空,(3)从非空列表的末尾删除一个元素,(4)在非空列表的开头插入一个元素?如果你能做到这四件事,那么你就可以反转一个链表。你知道怎么做吗?
标签: c linked-list