1. 程式人生 > >插入雙鏈表的詳細解析

插入雙鏈表的詳細解析

#include <stdlib.h> #include <assert.h> #include <stdio.h>

typedef struct NODE {  struct NODE *f;  struct NODE *b;  int    value;

}Node;

int dll_insert( register Node *rootp, int value) {     register Node *this;  register Node *next;  register Node *newnode;

 for( this = rootp; ( next = this -> f) != NULL; this = next)  {   if( next -> value == value)    return 0;   if( next -> value > value)    break;  }

    newnode = ( Node* )malloc( sizeof( Node ));  if( newnode == NULL)   return -1;  newnode -> value = value;

    newnode -> f = next;  this -> f = newnode;

 if( this != rootp)   newnode -> b = this;  else         newnode -> b = NULL;

 if( next != NULL)   next -> b = newnode;  else   rootp -> b = newnode;

 return 1; }

int main() {    Node* root;    root = ( Node* )malloc( sizeof( Node ) );//建立一個根指標    root -> f = NULL;//root裡面f中的內容為NULL    root -> b = NULL;//root裡面b中的內容為NULL    dll_insert( root, 3 );//在一個空的雙鏈表中插入3    dll_insert( root, 5 );//在雙鏈表中插入5

   printf( "%d\n", root -> f -> value );    printf( "%d\n", root -> f -> f -> value );    printf( "%d\n", root -> b -> value );    printf( "%d\n", root -> b -> b -> value );

   return 0;

}