尝试创建用于存储值的单个链接列表。 使用rank作为全局占位符,但每次递增时都尝试打印出值。
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
typedef struct Skill
{
int rank;
struct node *nextSkill;
}node;
node * addSkills(node * head);
node * createNode(node * new);
int rank = 0;
int main(void)
{
int x;
node * head = NULL;
for (x = 0; x < 2; x ++)
{
head = addSkills(head);
rank++;
}
}
node * addSkills(node * head)
{
node * newSkill = createNode(head);
head = newSkill;
return head;
}
node * createNode(node * new)
{
node * newNode = calloc(1,sizeof(node));
if(newNode == NULL)
{
printf("Memory Allocation Error\n");
exit(2);
}
newNode->rank = rank;
newNode->nextSkill = new;
return newNode;
}
void traverse(node * head)
{
node * conductor = head;
while(conductor != NULL)
{
printf("%d", conductor->rank);
conductor = conductor->nextSkill;
}
}
不确定我创建链接列表的方法是否错误,但我找不到原因?
答案 0 :(得分:0)
您不会致电traverse
。因此,不会生成任何输出。
答案 1 :(得分:0)
您预先设定的代码是新创建的节点。这就是为什么在1
的节点之前获得0
节点的原因。如果你想附加它们,你可以使用:
node * addSkills(node * head)
{
node* temp = NULL;
if ( head == NULL )
{
head = createNode();
return head;
}
temp = head;
while ( temp->nextSkill != NULL )
{
temp = temp->nextSkill;
}
node * newSkill = createNode();
temp->nextSkill = newSkill;
return head;
}
node * createNode()
{
node * newNode = calloc(1,sizeof(node));
if(newNode == NULL)
{
printf("Memory Allocation Error\n");
exit(2);
}
newNode->rank = rank;
return newNode;
}
答案 2 :(得分:0)
让我们以这种方式正确地推断您的数据结构:
struct pointer
{
int field;
struct pointer *link;
};
typedef struct pointer cell;
要创建链接列表,此功能正常工作:
cell *create_my_linked_list()
{
int n; /* number of elements to type */
int i;
int number; /*the values to input*/
cell *ptr; /* tmp pointer */
do
{
clrscr();
cout<<"\tWhat is the length of the elements you want to create ? ";
cin>>n;
for(i=0;i<n;i++)
{
ptr=(cell*)malloc(sizeof(cell));
cout<<"Type a number: ";
scanf("%3d",&number);
ptr->field=number;
ptr->link=head;
head=ptr;
}
return head;
}
要显示您的链接列表,请使用以下简单功能:
void display()
{
cell*node=head;
if(node==NULL)
{
cout<<" The linked list is empty !";
}else
{ cout<<" VThis is your list \n";
while(node!=NULL)
{
printf("%3d",node->field);
node=node->link;
}
}
}
上面的第一个函数正确创建链接列表但它还原它。它还假设您提前知道链表的长度,就像数组一样。为避免这一切,请使用此功能:
cell* create_a_linked_list_without_inverting_it()
{
cell*precedent=NULL;
cell*actual=NULL;
int datum;
int err;
do
{
cout<<" Type a number (or a letter to end) : ";
err=scanf("%d",&datum);
if(err<=0) break;
actual=(cell*)malloc(sizeof(cell));
actual->field=datum;
if(precedent==NULL)
{
head=actual;
}else
{
precedent->link=actual;
}
precedent=actual;
}while(1);
actual->link=NULL;
return head;
}
我希望这会有所帮助。 Begueradj:)