鱼C论坛

 找回密码
 立即注册
查看: 2571|回复: 6

为什么我的双向链表的插入不了一个数?

[复制链接]
发表于 2016-4-12 22:18:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. // 双向链表的基本操作.cpp : 定义控制台应用程序的入口点。
  2. //

  3. #include "stdafx.h"
  4. #include<time.h>
  5. #include<iostream>
  6. using namespace std;
  7. #define N 5
  8. typedef struct dulnode
  9. {
  10.         int data;
  11.         dulnode *prior;
  12.         dulnode *next;
  13. }dulnode,*dulinklist;
  14. void createlist(dulinklist &l)
  15. {
  16.         dulinklist p;
  17.         l = new dulnode;
  18.         l->next = NULL;
  19.         srand((int)(0));
  20.         for (int i = 0; i < N; i++)
  21.         {
  22.                 p = new dulnode;
  23.                 p->data = rand() % 100;
  24.                 p->next = l->next;
  25.                 l->next = p;
  26.         }
  27. }
  28. void printlist(dulinklist &l)
  29. {
  30.         dulinklist p = l->next;
  31.         while (p)
  32.         {
  33.                 cout << p->data << '\t';
  34.                 p = p->next;
  35.         }
  36.         cout << endl;
  37. }
  38. dulinklist getelem(dulinklist &l, int i)
  39. {
  40.         dulinklist p = l->next;
  41.         int j = 1;
  42.         while (p&&j < i)
  43.         {
  44.                 p = p->next;
  45.                 ++j;
  46.         }
  47.         if (!p&&j>i)
  48.                 exit(0);
  49.         return p;
  50. }
  51. int listinsert(dulinklist &l, int i, int e)
  52. {
  53.         dulinklist p,s;
  54.         if (!(p = getelem(l, i)))
  55.                 exit(0);
  56.         s = new dulnode;
  57.         s->data = e;
  58.         s->prior = p->prior;
  59.         p->prior->next = s;
  60.         s->next = p;
  61.         p->prior = s;
  62.         return 1;
  63. }
  64. int main()
  65. {
  66.         dulinklist l;
  67.         int e,i;
  68.         createlist(l);
  69.         printlist(l);
  70.         cout << "输入要插入的数:";
  71.         cin >> e;
  72.         cout << "输入要插入的位置:";
  73.         cin >> i;
  74.         listinsert(l, i, e);
  75.         printlist(l);
  76.     return 0;
  77. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-4-13 10:51:49 | 显示全部楼层
creatlist时节点的prior指针没有赋值。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-13 13:20:12 | 显示全部楼层
LeoChou 发表于 2016-4-13 10:51
creatlist时节点的prior指针没有赋值。

是赋值为NULL对吧,可还是不行
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-4-13 13:48:45 | 显示全部楼层
createlist时,你的prior指针呢?所有的节点的prior都被你指向了null
而你插入的时候,就是靠prior定位的
  s->data = e;
        s->prior = p->prior;  //从这时候开始,就出错了,s->prior =NULL;
        p->prior->next = s; // p->prior->next = NULL->next;报错,后面的我就不写了
        s->next = p;
        p->prior = s;
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-13 23:00:38 | 显示全部楼层
muyu0096 发表于 2016-4-13 13:48
createlist时,你的prior指针呢?所有的节点的prior都被你指向了null
而你插入的时候,就是靠prior定位的
...

那prior结点应该赋值什么?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-4-14 08:09:32 | 显示全部楼层
你构造链表,当然是和头指针一样,把它们链接起来啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-14 08:59:22 | 显示全部楼层
muyu0096 发表于 2016-4-14 08:09
你构造链表,当然是和头指针一样,把它们链接起来啊

那是l->prior=l->next=l?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-22 12:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表