sinat_27945027 2015-05-30 14:17 采纳率: 100%
浏览 3001
已采纳

关于头插入法建立双向链表

//还没实现
#include
#include
#include
#define OK 1
typedef int elemtype;
typedef int states;
typedef struct DuLNode{
elemtype data;
struct DuLNode *prior;
struct DuLNode *next;
}DuLNode,*DuLinkList;
states create(DuLinkList &L){
DuLinkList p;
L = (DuLinkList)malloc(sizeof(DuLNode));
L->next = NULL;
L->prior = NULL;
printf("please input the length of list:\n");
int n;
scanf("%d",&n);
for (int i = n; i > 0; i--){
p = (DuLinkList)malloc(sizeof(DuLNode));
printf("please input data of element No.%d\n", i);
scanf("%d", &p->data);
if (L->next = NULL){ L->next = p;
p->prior = L;
p->next = NULL;

    }
    else{
        p->next = L->next;
        p->prior = L;
        L->next->prior = p;
        L->next = p;

    }

}
return OK;

}

void print(DuLinkList L){
DuLinkList p;
p = L->next;
printf("the linklist is like this:\n");
while (p){

    printf("\t%d", p->data);
    p = p->next;
}
printf("\n");

}
void main(){
DuLinkList L;
create(L);
print(L);
system("pause");
}
实在不造哪里不对了。。。求助大神啊感激不尽!!!




  • 写回答

3条回答

  • danielinbiti 2015-05-30 14:51
    关注
     if (L->next = NULL){ L->next = p; 
    p->prior = L;
    p->next = NULL;
        }
        else{
            p->next = L->next;
            p->prior = L;//这里L就没变过,所有新创建的节点,它的prior都是执行L的,肯定错了
            L->next->prior = p;
            L->next = p;   //L没变过,也意味着L-next指向的永远是新节点,根据L只能找到一个节点
    
        }
    
    }
    

    基于你的代码改了一下

     #define OK 1
    typedef int elemtype;
    typedef int states;
    typedef struct DuLNode{
    elemtype data;
    struct DuLNode *prior;
    struct DuLNode *next;
    }DuLNode,*DuLinkList;
    states create(DuLinkList &L){
    DuLinkList p;
    DuLinkList L1=NULL;
    L = (DuLinkList)malloc(sizeof(DuLNode));
    L->next = NULL;
    L->prior = NULL;
    printf("please input the length of list:\n");
    int n;
    scanf("%d",&n);
    for (int i = n; i > 0; i--){
    p = (DuLinkList)malloc(sizeof(DuLNode));
    printf("please input data of element No.%d\n", i);
    scanf("%d", &p->data);
    if(L1!=NULL){
        L1->next = p; 
        p->prior = L1;
        p->next = NULL;
        L1 = p;
    }else{
        L = p;
        L1 = p;
    }
    }
    return OK;
    }
    void print(DuLinkList L){
    DuLinkList p;
    p = L;
    printf("the linklist is like this:\n");
    while (p){
        printf("\t%d", p->data);
        p = p->next;
    }
    printf("\n");
    }
    void main(){
    DuLinkList L;
    create(L);
    print(L);
    system("pause");
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题