#include <stdio.h>
#include <stdlib.h>
typedef struct DulNode{
int data;
struct DulNode *prior;
struct DulNode *next;
}DulNode,*DoubleLinkedList;
//初始化方法
DoubleLinkedList init(){
DoubleLinkedList l = (DulNode *)malloc(sizeof(DulNode));
l->prior = NULL;
l->next = NULL;
return l;
}
//创建节点
DoubleLinkedList createfromtail(DoubleLinkedList l){
DulNode *p;
DulNode *node;
p = l;
int i;
int j = 1;
while(j != 0){
scanf("%d",&i);
if(i != -1){
node = (DulNode *)malloc(sizeof(DulNode));
node->data = i;
node->prior = p;
node->next = NULL;
p->next = node;
p = node;
}else{
j = 0;
}
}
return l;
}
//遍历
void getElems(DoubleLinkedList l){
printf("双向链表的内容为:\n");
DulNode *p = l;
while(p->next != l){
printf("%d",p->next->data);
p = p->next;
}
}
//在指定位置前面插入
DoubleLinkedList ListInsert_Dul(DoubleLinkedList l){
int i;
int j;
int k =0;
DulNode *p = l;
printf("插入的位置:");
scanf("%d",&i);
printf("插入的数据");
scanf("%d",&j);
while(k != i && p->next != NULL){
p = p->next;
k++;
}
if(i < 0 || k < i){
printf("输入的位置有误");
return l;
}
DulNode *node = (DulNode *)malloc(sizeof(DulNode));
node->data = j;
node->prior = p->prior;
node->next = p;
p->prior->next = node;
p->prior = node;
return l;
}
//删除
DoubleLinkedList ListDelete_DuL(DoubleLinkedList l){
int i;
DulNode *p = l;
printf("要删除的位置:");
scanf("%d",&i);
int k =0;
while(k != i && p->next != NULL){
p = p->next;
k++;
}
if(i <= 0 || k < i){
printf("输入的位置有误\n");
return l;
}
if(i == k){
p->prior->next = p->next;
//p->next->prior = p->prior;
return l;
}
p->prior->next = p->next;
p->next->prior = p->prior;
return l;
}
int main(){
DoubleLinkedList l;
l = init();
l = createfromtail(l);
//l = ListInsert_Dul(l);
l = ListDelete_DuL(l);
getElems(l);
return 0;
}
09-12
2624