前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >单链表中头节点作用(深入理解)

单链表中头节点作用(深入理解)

作者头像
程序员小王
发布2018-04-13 10:45:21
7880
发布2018-04-13 10:45:21
举报
文章被收录于专栏:架构说架构说

今天QQ群里有人咨询一个问题 例如单链表中头节点作用 然后联想到做项目中解决core一个问题 虽然每天都在吃饭睡觉打豆豆,啥框架业务都不懂 解决了这一个问题 正好和提问关联起来 必须记录下来

单链表中头节点作用

struct ListNode* root

先看一c语言代码

代码语言:javascript
复制
1.void initData(char* p)2. {3.     p=new char[12];4. }5.6. char *p =NUll7. initData(p);8. if(p)9. {10.     cout<<"变量初始化完成"11. }

因为在调用过程中编译器发生了一次copy 这个大家都懂 我分析一下不让自己忘记记录下来

initData(p) 经历如下变化 p=NUll; ptemp=p ptemp=ox000 //最后结果是 p=NUll ptemp local释放了 指针本身是不会发生任何变化

如果想解决需要二级指针
void initData(char** p)

这个是做java根本意想不到的事情 在项目中为了解决这个问题 自然用到二级指针,

我也不赞成 关键是掌控不了他

对比一下

一个单链表 如果没有头节点 例如函数 void reverseHalfListAgin(struct ListNode* root)

代码语言:javascript
复制
eg:2.init:3.root--A-B-C root 4.第一个节点 root >A5.如果对root 进行翻转6.{7.    root=C->B->A;8.}9.root->A 结果failed10.11.如果对root删除:12.13.{14.    root->B->c;15.}16.root->A 结果failed

没有头节点 对链表操对第一个节点的 操作(初始化等)等最容易出现问题

如何解决问题

上面回答了用二级指针 跳出思维误区–

对于不可能事情就不去解决好了

为什么对root本身进行修改 对root->next (内容 *p)进行修改

作用

带头结点的单链表不需改变头指针的值, 函数参数表中 只要对头结点使用指针变量即可 struct ListNode* pBegin=root->next 对pBegin一切操作就不会出现问题了

实际工作:

现在reids mdb等都使用了链表基本结构 我想删除一个记录 假如记录正好是第一个元素 还没开始写代码 就跳入陷阱去了 是不是出了冷汗!!

如果你还遇到那些陷阱 请关注留言 让大家开心一下

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-05-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Offer多多 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 单链表中头节点作用
  • 如果想解决需要二级指针
  • void initData(char** p)
    • 如何解决问题
    • 作用
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档