gpt4 book ai didi

c - 删除双向链表中的节点(数据结构)

转载 作者:行者123 更新时间:2023-11-30 16:58:38 24 4
gpt4 key购买 nike

在双向链表的删除节点函数中,谁能解释一下 while 循环中的 (pointer->next)->data != data 如何工作?

   void delete(node *pointer, int data) {
while (pointer->next!=NULL && (pointer->next)->data != data) {
pointer = pointer -> next;
}

if (pointer->next == NULL) {
printf("Element %d is not present in the list\n", data);
return;
}

node *temp;
temp = pointer->next;

pointer->next = temp->next;
temp->prev = pointer;

free(temp);

return;
}

最佳答案

您可以使用此代码来插入、删除和更新。

#include<stdio.h>
struct double_linklist{
int val;
struct double_linklist *back;
struct double_linklist *next;
}*start=NULL;
typedef struct double_linklist dl;

void main()
{
dl *current,*New,*min;
int n,ch,i;
do{
New = (dl *)malloc(sizeof(dl));
system("cls");
printf("enter element");
New->val=getch()-'0';
printf("%d",New->val);
New->back = NULL;
New->next = NULL;
if(start == NULL)
{
start = New;
current = New;
}

else{
current->next = New;
New->back = current;
current = New;
}
printf("\n\nIfyou want to input next element then press y");

}while(getch()=='y');

system("cls");
printf("the elements are : \n");
current = start;
while(current->next != NULL)
{
printf("%d-->",current->val);
current = current->next;
}
printf("%d",current->val);


printf("\n\n1. Insert\n2. Delete\n3. Search\n4. Sort\n");
ch=getch()-'0';
switch(ch){
case 1 : printf("enter the position");
n=getch()-'0';
printf("enter the val");
New = (dl *)malloc(sizeof(dl));
New->val =getch()-'0';
New->back = NULL;
New->next = NULL;
current = start;
for(i=0;i<n-1;i++)
{
current =current->next;
}
current->back->next= New;
New->back = current->back;
New->next= current;
current->back=New;

printf("after inserting the link list are : ");
current =start;
while(current->next != NULL)
{
printf("%d-->",current->val);
current = current->next;
}
printf("%d",current->val);
break;

case 2: printf("enter a value do you want to delete : ");
n=getch()-'0';
printf("%d",n);
current = start;
while(current->val!=n)
current = current->next;
current->back->next = current->next;
current->next->back = current->back;
current->back = NULL;
current->next = NULL;
printf("after deleting the link list are : ");
current =start;
while(current->next != NULL)
{
printf("%d-->",current->val);
current = current->next;
}
printf("%d",current->val);
break;

case 3: printf("enter a number do you want to search");
n=getch()-'0';
printf("%d",n);
current = start;
i=1;
while(current->next != NULL)
{
if(current->val == n)
printf("%d\t",i);
current = current->next;
i++;

}
if(current->val == n)
printf("%d\t",i);
break;

case 4: New=start;
current = start;
min = current;
while(New->next != NULL)
{

while(current->next != NULL)
{
current = current->next;
if(current->val < min->val)
min = current;
}
ch = min->val;
min->val = New->val;
New->val = ch;

New = New->next;
current = New;
min = current;
}
printf("\nAfter sorting:\n");
current = start;
while(current->next != NULL)
{
printf("%d-->",current->val);
current = current->next;
}
printf("%d",current->val);
break;
}
}

关于c - 删除双向链表中的节点(数据结构),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38675027/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com