C 在开始处插入循环链接列表
我在开始时插入,但我的代码在最后插入。我正在考虑这个问题,但我认为我的逻辑是正确的。 我想,首先我做一个指针p,初始化它为head,然后增加它,直到它不等于head,然后创建一个新的链接。这是正确的方法吗 在这里C 在开始处插入循环链接列表,c,linked-list,insertion,C,Linked List,Insertion,我在开始时插入,但我的代码在最后插入。我正在考虑这个问题,但我认为我的逻辑是正确的。 我想,首先我做一个指针p,初始化它为head,然后增加它,直到它不等于head,然后创建一个新的链接。这是正确的方法吗 在这里 #include<stdio.h> #include<stdlib.h> typedef struct node{ int data; struct node *next; }sll; void traversal(sl
#include<stdio.h>
#include<stdlib.h>
typedef struct node{
int data;
struct node *next;
}sll;
void traversal(sll* head){
sll* p;
p=head;
do
{
printf("%d\n",p->data);
p=p->next;
}while (p!=head);
}
sll* insertionstart(sll* head,int data){
sll* ptr=(sll*)malloc(sizeof(sll));
ptr->data=data;
sll* p=head;
do
{
p= p->next;
} while (p->next!=head);
p->next=ptr;
ptr->next=head;
return head;
}
int main(){
sll* ptr;
sll* head;
sll* second;
sll* third;
sll* fourth;
sll* fifth;
head = (sll*) malloc(sizeof(sll));
second = (sll*) malloc(sizeof(sll));
third = (sll*) malloc(sizeof(sll));
fourth = (sll*) malloc(sizeof(sll));
fifth = (sll*) malloc(sizeof(sll));
head -> data=56;
head ->next=second;
second -> data=3;
second->next=third;
third -> data=18;
third ->next=fourth;
fourth -> data=90;
fourth ->next=fifth;
fifth -> data=76;
fifth ->next=head;
traversal(head);
printf("*******************\n");
head=insertionstart(head,42);
traversal(head);
return 0;
}
#包括
#包括
类型定义结构节点{
int数据;
结构节点*下一步;
}sll;
空隙穿越(sll*头部){
sll*p;
p=水头;
做
{
printf(“%d\n”,p->data);
p=p->next;
}而(p!=头);
}
sll*插入开始(sll*头部,整数数据){
sll*ptr=(sll*)malloc(sizeof(sll));
ptr->data=数据;
sll*p=水头;
做
{
p=p->next;
}while(p->next!=头部);
p->next=ptr;
ptr->next=头部;
回流头;
}
int main(){
sll*ptr;
sll*头部;
sll*秒;
sll*第三;
sll*第四;
sll*第五;
水头=(sll*)马洛克(sizeof(sll));
第二个=(sll*)malloc(sizeof(sll));
第三个=(sll*)malloc(sizeof(sll));
第四个=(sll*)malloc(sizeof(sll));
第五名=(sll*)malloc(sizeof(sll));
头部->数据=56;
头->下一个=秒;
第二->数据=3;
第二->下一个=第三个;
第三->数据=18;
第三->下一个=第四个;
第四->数据=90;
第四->下一个=第五个;
第五->数据=76;
第五->下一个=头部;
横向(头部);
printf(“*********************\n”);
头部=插入开始(头部,42);
横向(头部);
返回0;
}
如果希望新元素成为新的头,只需在插入开始中进行此更改即可:
return head; --> return ptr;
如果希望新元素成为新的头,只需在insertionstart
中进行此更改:
return head; --> return ptr;
贝兹爵士,我认为在循环ll中,首先p指向最后一个元素p->next=ptr,因此我将其递增。要在开头插入,必须有一些代码更改头
指针以指向新节点。此时,您的函数总是只返回旧的头
。主席先生,这里的p是递增的,而p=头也是递增的p
是头
的副本。改变p
对头部没有影响。如果您不相信这一点,只需在调试器中运行程序,并在程序运行时检查指针值。另外,如果它确实改变了head
,那么p->next=head
没有意义,因为head
会不断变化。是的,先生,如果我移除返回的head,它就在开始打印。贝兹先生,我认为在循环ll中,首先p转到最后一个元素p->next=ptr,因此我正在增加它。要在开始插入,您必须有一些代码来更改head
指向新节点的指针。此时,您的函数总是只返回旧的头
。主席先生,这里的p是递增的,而p=头也是递增的p
是头
的副本。改变p
对头部没有影响。如果您不相信这一点,只需在调试器中运行程序,并在程序运行时检查指针值。另外,如果它确实改变了head
,那么p->next=磁头
将毫无意义,因为磁头
将不断变化。是的,先生,如果我移除返回磁头,它将在开始时打印。