在c中将新节点推送为头部后,节点的名称是什么?



我开始学习链表。我已经将我的代码粘贴在下面。我有一个疑问。当我在前面插入一个节点时,我把它做成一个头。所以每当我想打印时,我都会调用打印列表(头(。如果我想从第二个节点打印,该怎么办?最初我把它命名为头。现在会是什么?我还了解到链表中不可能随机访问。但是我可以从任何我想要的节点打印。请澄清。

#include <stdlib.h>
#include <stdio.h>
struct node{
char data;
struct node* next;
};
void printlist(struct node* n)
{
while(n!=NULL)
{
printf("%cn",n->data);
n=n->next;
}
}
void InsertNodeAtFirst(struct node** head_ref)
{
printf("Node insertion at firstn");
struct node* newnode = (struct node*)malloc(sizeof(struct node*));
newnode->data='a';
newnode->next= *head_ref;
*head_ref = newnode;
printf("n");
printlist(newnode);
}
void InsertNodeAfter(struct node* previous_node)
{
if(previous_node==NULL)
printf("Previous node cannot be blank or NULLn");
printf("Node insertion at middlen");   
struct node* middlenode = (struct node*)malloc(sizeof(struct node*));
middlenode->data='c';
middlenode->next=previous_node->next;
previous_node->next = middlenode;
printf("n");
printlist(previous_node);
}
void InsertNodeAtEnd(struct node** LastNode)
{
printf("Node insertion at Endn");
struct node* newnode = (struct node*)malloc(sizeof(struct node*));
struct node* last = *LastNode;
newnode->data='f';
newnode->next=NULL;
while(last->next!=NULL)
{
last=last->next;
}
last->next=newnode;
printf("n");
}
int main(void)
{
struct node* head = (struct node*)malloc(sizeof(struct node*));
struct node* second = (struct node*)malloc(sizeof(struct node*));
struct node* third = (struct node*)malloc(sizeof(struct node*));
head->data='b';
head->next=second;
second->data='d';
second->next=third;
third->data='e';
third->next=NULL;
printlist(head);
InsertNodeAtFirst(&head);
InsertNodeAfter(head);
InsertNodeAtEnd(&head);
printlist(head);
}

如果我想从第二个节点打印怎么办?为此,将特定节点地址传递给printlist()函数。

例如,在您的主函数中,在创建链表后询问用户您要从哪个节点打印。比方说n=2

例如

InsertNodeAtFirst(&head);

struct node *temp = head;

/* make temp to point to the node which you want */

/* Find particular node address from where you want to print */

for(int row= 0; row < n; row++){

if(temp->next != NULL)
temp = temp->next;

}

现在将printlist()称为

printlist(temp);

我还了解到,在链表中不可能进行随机访问?只有当你知道该节点的地址时,它才有可能,要得到它,你必须从head节点遍历。

Head 将永远是你的第一个列表节点。如果您想访问第二个,您将使用head->next.

在列表中添加新元素时,当前节点将成为新节点的下一个指针,新节点指针将成为头部。

如果你想访问第三个,那么你需要有权访问新头的下一个指针的下一个指针,这使得它head->next-next

当我在前面插入一个节点时,我把它做成一个头。所以只要我想 要打印,我将调用打印列表(头(。如果我想从 第二个节点?最初我把它命名为头。现在会是什么?

名称head是指头部,表达式head->next是指跟随头部的元素等。

我还了解到链表中不可能随机访问。但 我可以从任何我想要的节点打印。请澄清。

随机访问具有特殊含义。这意味着您可以有效地访问所需的任何元素,通常带有其索引。在真正的链表中不可能进行随机访问,因为如果你想访问元素 n,你需要从 head 开始,然后找到下一个,然后找到下一个,依此类推。因此,访问元素 n 的总成本是 n 个操作。这实际上效率不高,因为访问元素所需的操作数会随着该元素的索引而增加。非常常见的随机访问结构是数组。

相关内容

  • 没有找到相关文章

最新更新