首页 > 其他分享 >【链表】链表变化时其中的节点变化情况

【链表】链表变化时其中的节点变化情况

时间:2023-02-24 17:32:05浏览次数:32  
标签:p1 ListNode p4 val next 链表 new 变化 节点

这个点之前一直很混淆,今天碰巧看了个题,记录一下。

对于node* p = a;此时p与a的地址一样,那么p发生变化时a是不是也变化了呢?发现有两种不一样的情况:
如果p = p->next;此时p变化了,a没有变化,对于p->next = b;此时p->next变化了,a->next也变化了。
例子:

struct ListNode {
    int val;
    ListNode* next;
    ListNode() : val(0), next(nullptr) {}
    ListNode(int x) : val(x), next(nullptr) {}
    ListNode(int x, ListNode* next) : val(x), next(next) {}
   
};
int main()
{
    ListNode* p1 = new ListNode(1);
    ListNode* p2 = new ListNode(2);
    ListNode* p3 = new ListNode(3);
    ListNode* p4 = new ListNode(4);
    ListNode* p5 = new ListNode(5);
   
    p1->next = p2;
    p2->next = p3;
    p3->next = p4;
    p4->next = p5;
    p5->next = nullptr;
    ListNode* p7 = p1;
    cout << "before change p7:" << p7 << "," << p1<<endl;
    p7 = p7->next;
    
    cout <<"p1->val"<< p1->val<<"\n";
    cout << "p7->val"<<p7->val<<"\n";
    cout << "after change p7  p7 = p7->next;" <<"p7"<< p7 << "," << "p1"<<p1<<endl;
    ListNode* p8 = p1;
    cout << "before change p8:" << p8->next->val << "p1:" << p1->next->val << endl;
    p8->next = p4;
    cout << "agter change p8->next = p4:" <<"p8->next->val "<< p8->next->val << "  p1->next->val:" << p1->next->val << endl;
    p8 = p5;
    cout << "after p8=p5" << "p8:" << p8 << "p1:" << p1 << endl;
}


【链表】链表变化时其中的节点变化情况_其他
可以看出来,p8本身发生变化时不会影响p1;但p8->next指向另外的节点时,p1也会跟着变化。
原因有待深究,。

标签:p1,ListNode,p4,val,next,链表,new,变化,节点
From: https://blog.51cto.com/u_15980129/6084267

相关文章

  • k8s-新增服务端节点
    本文章是 k8s二进制高可用集群部署 的分支。详细步骤请参考目录。1.etcd扩容**如果etcd通过CA生成的证书不包含当前节点的ip,可能etcd集群需要重新生成证书。1......
  • 删除链表重复的元素
    /***Definitionforsingly-linkedlist.*structListNode{*intval;*structListNode*next;*};*/structListNode*deleteDuplicates(str......
  • 链表练习——两数求和
    先看题目:给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式......
  • 算法随想Day21【二叉树】| LC669-修剪二叉搜索树、LC108-将有序数组转换为二叉搜索树
    LC669.修剪二叉搜索树相当于一个中序遍历吧,当某个节点<low时,其右子树的各个节点值虽然都比该节点值大,但仍可能存在<low的,所以要据于次节点,向其右子树进军遍历,等回溯时,del......
  • Jenkins 添加节点 java web方式
    启用代理端口可以自己指定添加节点参数说明:Name(名称):即节点名称Description(描述):介绍该节点的作用,如Docker构建ofexecutors(并发构建数):定义该节点可以执行多少......
  • el-tree 获取父级节点数据
    转自于:https://my.oschina.net/u/3704598/blog/4438210 使用node-click事件,该事件会接收三个参数,分别是当前data节点数据,node当前节点,root根节点数据。我们通过......
  • ClickHouse节点扩容、往集群中添加节点
     ClickHouse节点扩容、往集群中添加节点 背景最近公司ck数据量增长太快,几个T的硬盘快不够了,继续扩容。扩容有三种方案:    1.增加ck目前数据盘的大小,由于是......
  • 照片的年龄变化之腾讯云接口测试
    代码:importjsonimportbase64fromtencentcloud.commonimportcredentialfromtencentcloud.common.profile.client_profileimportClientProfilefromtencentclo......
  • 代码随想录算法Day22 | 235. 二叉搜索树的最近公共祖先 ,701.二叉搜索树中的插入操作 ,4
    235.二叉搜索树的最近公共祖先题目链接:235.二叉搜索树的最近公共祖先-力扣(LeetCode)思路本题可以利用二叉搜索树有序 的特性。在有序树里,如果判断一个节点的左子......
  • Git 不识别文件名字母大小写变化
    解决方案为了解决上述这个问题,可以终端运行以下命令:gitmvdockerfileDockerfile如果一次重命名了很多文件呢只有一个文件名大小写变化的这种场景,已经知道怎么应对......