双链表(头插法)

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

typedef struct node{
    int data;
    struct node *prior;
    struct node *next;
}Node,*LinkList;
//初始化(头插法)
bool InitList(LinkList &L,int n){
    L=(LinkList)malloc(sizeof(Node));
    L->prior=NULL;
    L->next=NULL;
    int x;
    printf("请输入结点的值"); 
    scanf("%d",&x);
        Node *p;
        p=(Node *)malloc(sizeof(Node));
        p->data=x;
        L->next=p;
        p->prior=L;
        p->next=NULL;
    while(n-1>0){
        printf("请输入结点的值"); 
        scanf("%d",&x);
        if(x!=0){
        p=(Node *)malloc(sizeof(Node));
        p->data=x;
        p->next=L->next;
        L->next->prior=p;
        p->prior=L;
        L->next=p;
    }
        n--;
    }
    return true;
} 
//删除结点 
bool DelNode(LinkList &L,int i){
    LinkList m=L;
    LinkList q;
    int j;

    for(j=0;j<i-1;j++){
        m=m->next;
    }
    if(i==0){
        L=L->next->next;//删除的是头结点
        L->prior=NULL; 
    }
    else
    {
    q=m->next;
    m->next=q->next;
    q->next->prior=m;
    free(q);
    }
    return true;
}
//遍历
bool travel(LinkList &L){
    LinkList m;
    m=L->next;
    while(m){
        printf("%d",m->data);
        m=m->next;
    }
    return true;
    
} 
int main(){
    LinkList L;int n;
    printf("输入要插入的结点的个数:");
    scanf("%d",&n);
    InitList(L,n);    
    DelNode(L,3);
    travel(L);
    return 0;
}

 

posted @ 2022-07-10 17:03  梦开始的地方  阅读(181)  评论(0)    收藏  举报