在链表中插入
Insertion in Linked list
我正在研究如何在开头插入节点,我通过这段我无法理解的代码。
我没有得到打印功能。
typedef struct node
{
int data;
struct node *next;
} Node;
Node *head;
void insert(int x)
{
Node *temp=(Node*)malloc(sizeof(Node));
temp->data=x;
temp->next=head;
head=temp;
}
void print()
{
Node *temp=head;
printf("List is:");
while(temp!=NULL) //Unable to understand this statement as how will the loop terminate?
{
printf("%d ",temp->data);
temp=temp->next;
}
printf("\n");
}
假设你的链表看起来像
a->b->c->d
|
|
head
所以现在我们使用一个临时变量
temp = head;
和
while(temp != NULL)
{
//Keep moving temp
printf("%d\n",temp->x);
temp = temp->next;
}
所以 head
永远不会移动,它只是移动到列表末尾的临时指针,当我们到达 temp = NULL
时得到列表的末尾
a->b->c->d
|
|
temp = head
temp = temp->next;
a->b->c->d
| |
| |
head temp
重复上述移动直到 temp = NULL
当最后一个节点内容被打印时为 TRUE,我们做 temp = temp->next;
C 程序需要一个 main 函数作为开始。如果你想测试上面的代码,你需要添加一个main函数来在开始时将head初始化为NULL,多次调用insert()和print()来检查结果。
问题的缩进一团糟。
但是打印函数是:
void print() {
Node *temp=head;
printf("List is:");
while(temp!=NULL) {
printf("%d ",temp->data);
temp=temp->next;
}
}
If head==NULL
then temp==NULL
at the start and the loop will immediately terminate.
If head!=NULL
then temp!=NULL
at the start and the data for head element will be output.
行 temp=temp->next;
将使 temp
指向列表中的下一个 Node
并且循环将继续。
如果列表中只有 Node
,则循环将终止。
否则它将打印下一个元素的数据,并且 temp=temp->next
行将移动到第三个 Node
(如果有)。
等等...
注意: 不推荐 Node *head;
行。它将被初始化为 NULL
因为它具有静态存储持续时间。但建议 Node *head=NULL;
用于面向未来和可读性。
我正在研究如何在开头插入节点,我通过这段我无法理解的代码。
我没有得到打印功能。
typedef struct node
{
int data;
struct node *next;
} Node;
Node *head;
void insert(int x)
{
Node *temp=(Node*)malloc(sizeof(Node));
temp->data=x;
temp->next=head;
head=temp;
}
void print()
{
Node *temp=head;
printf("List is:");
while(temp!=NULL) //Unable to understand this statement as how will the loop terminate?
{
printf("%d ",temp->data);
temp=temp->next;
}
printf("\n");
}
假设你的链表看起来像
a->b->c->d
|
|
head
所以现在我们使用一个临时变量
temp = head;
和
while(temp != NULL)
{
//Keep moving temp
printf("%d\n",temp->x);
temp = temp->next;
}
所以 head
永远不会移动,它只是移动到列表末尾的临时指针,当我们到达 temp = NULL
a->b->c->d
|
|
temp = head
temp = temp->next;
a->b->c->d
| |
| |
head temp
重复上述移动直到 temp = NULL
当最后一个节点内容被打印时为 TRUE,我们做 temp = temp->next;
C 程序需要一个 main 函数作为开始。如果你想测试上面的代码,你需要添加一个main函数来在开始时将head初始化为NULL,多次调用insert()和print()来检查结果。
问题的缩进一团糟。
但是打印函数是:
void print() {
Node *temp=head;
printf("List is:");
while(temp!=NULL) {
printf("%d ",temp->data);
temp=temp->next;
}
}
If head==NULL
then temp==NULL
at the start and the loop will immediately terminate.
If head!=NULL
then temp!=NULL
at the start and the data for head element will be output.
行 temp=temp->next;
将使 temp
指向列表中的下一个 Node
并且循环将继续。
如果列表中只有 Node
,则循环将终止。
否则它将打印下一个元素的数据,并且 temp=temp->next
行将移动到第三个 Node
(如果有)。
等等...
注意: 不推荐 Node *head;
行。它将被初始化为 NULL
因为它具有静态存储持续时间。但建议 Node *head=NULL;
用于面向未来和可读性。