怎么理解q->next=p->next,作用是什么,如果要添加一个节点怎么办

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

img

假设有三个节点 A→B→C,q指向A,p指向B
你为了将B删掉,就:

  • 令A→C:就是题目中的q->next=p->next,它表示q的后一个是p的下一个,而q就是A,p的下一个就是C,也就实现了A→C
  • 进而删掉B节点,也就是释放B的内存,就是题目中的free(p)

如果添加,比如添加D,使得A→D→B→C
则应该t指向D,然后令q->next=t,t->next=p,这样就可以将D插在A和B中间了

img

本来q->next=p;p->next=p的下一个。相当于,q连起来了p,p又连起来了p的下一个,这是一条链,q->next是q,q->next是p的下一个,q->next=p->next。相当于将q直接连到了p的下一个。这样子q和p就断链了。p的下一个被两个连接,一个是q->next,一个是p->next。最后free(p);相当于释放了p的结点。也就是把p给断掉,释放空间。

q->next=p->next,这个可以画图来理解

img


添加节点的话,那就借助链表头插法/尾插法来进行添加:
之前看过的一篇文章,讲得很清晰,博主可以考虑看一下https://blog.csdn.net/Dubao123/article/details/107158453

img

希望对题主有所帮助,可以的话,帮忙点个采纳!