数据结构C语言>3基本链表>3-9具有头结点的链表

具有头结点的链表,就是有一个虚构的结点,链表的中第一个结点其实是第二个结点。

#include < stdlib.h >

struct  llist
{
    
int  num;
    
struct  llist  * next;
};
typedef 
struct  llist node;
typedef node 
* llink;

// 输出结点值
void  printllist(llink head)
{
    llink ptr;
    ptr
= head -> next;
    
while (ptr  != NULL)
    {
        printf(
" %d  " ,ptr -> num);
        ptr
= ptr -> next;
    }
    printf(
" \n " );
}

// 找结点
llink findnode(llink head, int  value)
{
    llink ptr;
    ptr
= head -> next;
    
while (ptr  != NULL)
    {
        
if (ptr -> num == value)
        {
            
return  ptr;
        }
        ptr
= ptr -> next;
    }
    
return  NULL;
}

// 创造链表
llink createllist( int   * array, int  len)
{
    llink head;
    llink ptr,ptr1;
    
int  i;
    
    head
= (llink)malloc( sizeof (node));
    
if (head == NULL)
    {
        printf(
" 内存分配失败!\n " );
        
return  NULL;
    }
    ptr
= head;
    
for (i = 0 ; i < len;i ++ )
    {
        ptr1
= (llink)malloc( sizeof (node));
        
if ( ! ptr1)
        {
            
return  NULL;
        }
        ptr1
-> num = array[i];
        ptr1
-> next = NULL;
        ptr
-> next = ptr1;
        ptr
= ptr1;
    }
    
return  head;
}

// 插入结点
llink insertnode(llink head,llink ptr,  int  nodevalue, int  value)
{
    llink 
new ;
    
new = (llink)malloc( sizeof (node));
    
if ( ! new )
    {
        
return  NULL;
    }
    
new -> num = value;
    
new -> next = NULL;
    
// 找结点
    llink getnode;
    getnode
= findnode(head,nodevalue);
    
// 如果没找到结点,就是插在第一个结点之前
     if (getnode  == NULL)
    {
        
new -> next = ptr -> next;
        ptr
-> next = new ;
    }
    
else // 找到指定结点,就插在指定结点后面
    {
        
new -> next = getnode -> next;
        getnode
-> next = new ;
        
    }
    
return  head;
}





int  main( int  argc, char   * argv[])
{
    
int  llist1[ 6 ] = { 1 , 2 , 3 , 4 , 5 , 6 };
    llink head;
    
    head
= createllist(llist1, 6 );
    
if ( ! head)
    {
        exit(
1 );
    }
    printf(
" 原来的链表: " );
    printllist(head);
    head
= insertnode(head,head, 6 , 23 );
    printf(
" 插入后的链表: " );
    printllist(head);
}

 

你可能感兴趣的:(数据结构)