急求数据结构双链表各种操作,快!该如何解决

急求数据结构双链表各种操作,快!
急求数据结构双链表各种操作,快!

------解决方案--------------------
#include <stdlib.h>
#include <stdio.h>
/*――――――――――――双向链表的定义――――――――――――*/
struct llist
{
struct llist *prior;
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("[%c]",ptr->num);
ptr = ptr->next;
}
printf("\n");
}
/*――――――――――――双向链表的倒序输出――――――――――*/
void printllist2(llink head)
{
llink ptr;
ptr = head;
while( ptr->next != NULL ){
ptr=ptr->next;
}
while ( ptr != head )
{
printf("[%c]",ptr->num);
ptr = ptr->prior;
}
printf("\n");
}
/*――――――――――――双向链表的创建―――――――――――*/
llink createllist(int *array,int len)
{
llink head; /* 双向链表的开始指针 */
llink ptr,ptr1;
int i;
/* 建立开头结点 */
head = ( llink ) malloc(sizeof(node)); /* 分配内存 */
if ( !head ) /* 检查指针 */
return NULL;
ptr = head;/* 将ptr指向链表开始 */
for ( i = 0; i < len; i++ ) /* 建立其它结点回路 */
{
ptr1 = ( llink ) malloc(sizeof(node));
if ( !ptr1 )
return NULL;
ptr1->num = array[i]; /* 建立结点内容 */
ptr1->next = NULL; /* 设定指针初值 */
ptr1->prior = NULL;
ptr->next = ptr1; /* 连接结点 */
ptr1->prior = ptr;
ptr = ptr->next;
}
return head;
}
/*―――――――――――双向链表的结点插入――――――――――*/
llink insertnode(llink head,llink ptr,int value)
{
llink new1,ptr1=head; /* 新结点指针变量 */
while(ptr1!=ptr)
ptr1=ptr1->next;
if(!ptr1){
 printf("找不到插入位置,插入位置有误\n");
 return head;
}
new1= ( llink ) malloc(sizeof(node)); 
if ( !new1 )
return NULL;
new1->num = value; /* 设定初值 */
new1->next = NULL;
new1->prior = NULL;
new1->next = ptr->next;/* 交换4个指针*/
ptr->next->prior = new1;
ptr->next = new1;
new1->prior = ptr;
return head;/* 返回头结点 */
}
/*―――――――――――双向链表的结点删除――――――――――-*/
llink deletenode(llink head,llink ptr)
{
if(!(head->next)) {/* 链表为空直接返回头指针 */
printf("删除链表为空\n");
return head;
}
llink previous;
previous = head;
if(ptr){
while ( previous->next != ptr ) /* 找结点ptr前一结点 */
 previous = previous->next;
/* 找结点ptr前一结点之后进行删除操作 */
previous->next = ptr->next; 
ptr->next->prior=previous; /* 删除中间结点 */
}
else{
while ( previous->next->next != NULL )
previous = previous->next;
ptr= previous->next;
previous->next = ptr->next;
}
free(ptr);
return head;/* 返回头结点 */
}
/*―――――――――――――主程序――――――――――――――*/
void main(){
char llist1[6] = { a, b, c, d, e, f };
llink head;
/* 建立链表并输出*/
head = createllist(llist1,6); 
if ( !head )
{
printf("内存分配失败! \n");
exit(1);
}
printf("原来的链表: ");
printllist(head);
/* 插入新结点(在表头插入元素"0")*/
head = insertnode(head,head,0);
if ( !head )
{
printf("内存分配失败! \n");
exit(1);
}
printf("插入结点后的链表: ");
printllist(head);