鱼C论坛

 找回密码
 立即注册
查看: 1831|回复: 4

[已解决]#新手求助#关于使用new的问题

[复制链接]
发表于 2018-9-7 16:09:05 | 显示全部楼层 |阅读模式

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

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

x
  1. node* createFromLast()
  2. {
  3.         node *p_old = NULL;
  4.         node *p_new = NULL;
  5.         int n;
  6.        
  7.         cin >> n;
  8.         node *last = new node;
  9.         last->value = n;
  10.         last->next = NULL;

  11.         p_old = last;
  12.         while (cin >> n)   
  13.         {
  14.                 [b]p_new = new node;[/b]
  15.                 p_new->value = n;  
  16.                 p_new->next = p_old;  
  17.                 p_old = p_new;  
  18.         }
  19.         return p_new;
  20. }
复制代码


这是一个用尾插法创建列表的一个方法,关于p_new有点问题;
p_new是一个指向结构体的指针,声明并初始化为NULL, 如果在while循环里不用new会出现什么问题,为什么
最佳答案
2018-9-7 18:39:26
p_new 是新的节点。透过 new 申请新的空间来放新的资料。
没有就没有空间存储新的数据……
你的 while 是死循环吧?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-9-7 18:39:26 | 显示全部楼层    本楼为最佳答案   
p_new 是新的节点。透过 new 申请新的空间来放新的资料。
没有就没有空间存储新的数据……
你的 while 是死循环吧?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-7 22:08:49 | 显示全部楼层
claws0n 发表于 2018-9-7 18:39
p_new 是新的节点。透过 new 申请新的空间来放新的资料。
没有就没有空间存储新的数据……
你的 while 是 ...

while循环输入0就可以跳出了,或者ctrl+z然后回车
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-7 22:24:00 | 显示全部楼层
claws0n 发表于 2018-9-7 18:39
p_new 是新的节点。透过 new 申请新的空间来放新的资料。
没有就没有空间存储新的数据……
你的 while 是 ...
  1. // 尾插法
  2. node* createFromLast()
  3. {
  4.         node *p_old = NULL;
  5.         node *p_new = NULL;
  6.         int n;
  7.         
  8.         cin >> n;
  9.         node *last = new node;
  10.         last->value = n;
  11.         last->next = NULL;

  12.         p_old = last;
  13.         while (cin >> n)   
  14.         {
  15.                 [b]p_new = new node;[/b]
  16.                 p_new->value = n;  
  17.                 p_new->next = p_old;  
  18.                 p_old = p_new;  
  19.         }
  20.         return p_new;
  21. }

  22. // 头插法
  23. node *createFromHead()
  24. {
  25.         node *p_old = NULL;
  26.         node *p_new = NULL;
  27.         node *head = new node;
  28.        
  29.         int n;
  30.         cin >> n;
  31.         head->value = n;
  32.         p_old = head;
  33.         while (cin >> n)
  34.         {
  35.                 p_new = new node;
  36.                 p_new->value = n;
  37.                 p_old->next = p_new;
  38.                 p_old = p_new;
  39.         }
  40.         return head;
  41. }

  42. // 打印链表
  43. void printList(node *head)
  44. {
  45.         if (head == NULL)
  46.         {
  47.                 cout << "链表为空!" << endl;
  48.         }
  49.         else
  50.         {
  51.                 while (head)
  52.                 {
  53.                         cout << setw(4) << head->value;   // 引发了异常: 读取访问权限冲突。
  54. **head** 是 0xCDCDCDCD。
  55.                         head = head->next;
  56.                 }
  57.                 cout << endl;
  58.         }
  59. }

  60. int main()
  61. {
  62.         cout << "请输入链表数据:" << endl;
  63.         //node *test = createFromLast();
  64.         node *test = createFromHead();
  65.         cout << "创建链表完毕:" << endl;
  66.         printList(test);

  67.         system("pause");
  68.         return 0;
  69. }
复制代码


你好,不好意思,又有问题要麻烦你了,
关于打印链表的:
1. 尾插法打印一切正常;
2.头插法打印可以打印完整,但程序会出错,错误如注释所示;
em......求解
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-7 23:11:22 | 显示全部楼层
Eakim 发表于 2018-9-7 22:24
你好,不好意思,又有问题要麻烦你了,
关于打印链表的:
1. 尾插法打印一切正常;

还没上机,应该只有输出一个,然后报错吧?
你的链表不是链表,断开了。
尾插法没有维护尾指针;头插法的尾巴不见了,没有维护头指针
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-10 03:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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