如何在c ++中处理LinkedList的指针

问题描述 投票:1回答:1

我是C ++的新手,所以这是我要解决的实践问题。所以我打算将一个int逐位放入一个链表,这是我写的:

ListNode* listtest() {
     int i = 1234567;
     ListNode* head = NULL;
     ListNode** p = &head;
     while (i != 0) {
         int a = i % 10;
         ListNode* tmp = new ListNode(a);
         if (head == NULL) {
             head = tmp;
         }
         else {
             (*p)->next = tmp;
             p = &tmp;
         }
         i = i / 10;
     }
     return head;

 }

因此事实证明,这将输出一个链表,而下一个是它本身。但是,当我将p = &tmp更改为p = &(*p)->next后,效果很好。据我所知,这两行代码都将指针p更改为p之后的下一个节点。结果如何如此不同?

((还有任何推荐的文章或视频,我可以阅读以学习如何处理LinkList中的指针,作为初学者,这非常令人困惑。)

c++
1个回答
1
投票

[tmpfor循环中的局部变量。

[(*p)->next是链接列表节点中的next指针。

(*p)->next = tmp;将一个设置为另一个的值,但是它们仍然是两个完全独立的实体。指向其中一个的指针在逻辑上不等同于指向另一个的指针。此时,您可以将它们视为同卵双胞胎。他们看起来像。他们说话都一样。但是,将手指指向其中一个并不等同于将手指指向另一个。它们是各自独立的实体。更重要的是:

[p = &tmp;-将p设置为指向tmp

立即被销毁。这是循环中的局部变量,循环结束后,即使循环再次迭代,此变量也会被销毁。

之后尝试访问此对象是未定义的行为,将导致in demons flying out of your nose。除非您喜欢恶魔从鼻子里飞出来,否则您不应该那样做。

© www.soinside.com 2019 - 2024. All rights reserved.