码迷,mamicode.com
首页 > 其他好文 > 详细

3.双向链表的纠结

时间:2016-03-05 13:18:04      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:

#include<stdio.h>
#include<stdlib.h>
typedef int ElemType; 
struct Node{
    Node *next;
    Node *prior;
    ElemType data;
};
void CreateList(Node*&L)
{
    L = (Node*)malloc(sizeof(Node));
    if(!L) exit(-2);
    L->next = L;
    L->prior = L;
    L->data = 0;
}
void InsertList(Node*&L,int n,ElemType e)//较之前版本 改为插入到任意位置
{
    Node *p = L;
    for(int i=0;i<n-1;++i)
    {
        p=p->next;
    }
    Node *s = NULL;
    s=(Node*)malloc(sizeof(Node));
    s->data = e;
    
    p->prior->next = s; s->prior = p->prior;
    p->prior = s;s->next = p;
    ++(L->data);
}
void DeleteList(Node*&L,int n)
{
    Node*p = L;
    if(n<1||n>L->data) exit(-2);
    for(int i = 0;i < n;i++)//L是头结点,不能被销毁
    {
        p=p->next;
    }
    p->prior->next = p->next;p->next->prior = p->prior;
    free(p);
    --(L->data);
}
void ShowList(Node*&L)
{
    Node *p = L;
    
    while(p->next!=L){
        
        printf(">%d\t",(p)->data);
        p=p->next;
        if(p->next == L)
        {
            printf(">%d\t",(p)->data);
        }
    }
        
    printf("\n");
}
int main()
{
    Node *N1;
    CreateList(N1);
    InsertList(N1,1,1);
    ShowList(N1);
    InsertList(N1,1,2);
    ShowList(N1);
    InsertList(N1,1,3);
    ShowList(N1);
    InsertList(N1,1,4);
    ShowList(N1);
    DeleteList(N1,1);
    ShowList(N1);
    DeleteList(N1,2);
    ShowList(N1);
}
    

有第一个L头结点的存在,导致后面的删除函数不能在p指向L时进行销毁。

完善不够 权当备份。

3.双向链表的纠结

标签:

原文地址:http://www.cnblogs.com/minemine/p/5244571.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!