2016-07-30 10 views
0

二重リンクリストのノード削除機能で誰も私のことをどのように説明できますか(pointer-> next) - > data!= whileループ作業中のデータ?二重リンクリスト内のノードを削除する(データ構造体)

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; 
    } 
+0

'pointer-> next'とは何ですか?それはリストの次のノードですか?それからもう少し考えてみましょう... 'ポインタ - >次 - >データ'は何でしょうか? 'pointer-> next-> data'と' this-> data'を比較する理由は何でしょうか? –

+0

それは次のノードのデータです@JoachimPileborg –

+0

また、あなたは*** C++ ***でプログラミングしていますか?*** C ***でプログラミングしていますか? C++固有のコードはありません。C++では 'delete'は*キーワード*なので、C++では許されない関数名として' delete'を使用しています。あなたの質問に適切なタグを付けてください。 –

答えて

0

このコードを使用して、削除と更新を挿入できます。

#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; 
      } 
} 
関連する問題