我确信这很简单,但我是链表的新手,对指针有点生疏。我习惯于在 C++ 中进行编码,您可以轻松地传递参数,但在 C 中却没有这么多。所以当事情不那么容易工作时,我会感到困惑。
我基本上只想要我的程序中的一个函数,它接收一个传递的变量并在链表中搜索它。我让它在 main 中工作,但是将它作为一个单独的函数让我很头疼。
#include <stdio.h>
#include <stdlib.h>
int globalNum = 1;
typedef char DATA;
struct node
{
DATA d;
int nodeNum;
struct node *next;
};
main()
{
struct node *head = NULL;
struct node *tail = NULL;
int nodeNum;
/*CREATE*/
while(globalNum <= 5)
{
struct node *new;
if((new = malloc(sizeof(struct node))) == NULL) abort();
new->next = NULL;
new->nodeNum = globalNum;
globalNum++;
if(!head) head = new;
else tail->next = new;
tail = new;
}
/*ACCESS*/
struct node *access;
access = head;
while(access)
{
if(access->nodeNum != 5)
{
printf("%d\n", access->nodeNum);
access = access->next;
printf("NEXT\n");
}
else
{
printf("FOUND\n");
return 0;
}
if(!access)
{
printf("CANNOT ACCESS\n");
return 0;
}
}
}
@555k 感谢双指针的建议!我为访问代码做了一个类似的功能,但它不读取链表节点和分段错误。搜索功能如何知道access->next
位置是什么?调用时需要传递什么search(&head);
?
int access(struct node *head)
{
struct node *access;
access = head;
while(access)
{
if(access->nodeNum != 5)
{
printf("%d\n", access->nodeNum);
access = access->next;
printf("NEXT\n");
}
else
{
printf("FOUND\n");
}
if(!access)
{
printf("CANNOT ACCESS\n");
}
}
}