[英]delete node in doubly linked list (Data Structures)
在雙鏈表的刪除節點功能中,誰能解釋我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;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.