关于双向链表插入算法的问题
菜鸟提问 今看数据结构书 书上提供了一种算法 如下图:
可是我觉得不好记 我自己又想了两种 不知道对不对,求大神指点,如下图:
我觉得我自己想的这两个算法 第一种没问题 ,第二种的话 要先保存已知P的前节点 即a的指针,
不知道我说的对不对
[解决办法]
首先我要对我8楼的回答订正一下,双向链表的插入其实只涉级到四个指针域的修改。
其次我对楼主这种为求甚解,孜孜不倦,锲而不舍的精神,有些感动,在这个燥动的大环境下还有LZ这样的人存在,让我很有些惊异。
对于LZ在12楼表达的两种方法中的第一种,其实LZ有产生第一种思维方式就让我有些意外,因为这也让你我知道看待双向链表有另外一种视角,我觉得这种思为方式是很值得提倡的。如果处理问题有多种思路那是很好的,中国人其实缺乏 创造性思维。
第二种将双链表看成单链表是普遍的思维模式(我个人也倾向于这种),LZ在12楼说得很清楚,将需要连接的两个指针域看成是一个,只有当相临两个结点的相临的两个指针域互向指向对方后,我们才把这里看成是他们之间已连接上了,否则还没有连接完成。当然各个结点连接的先后问题,其实需要理解一下,单链表需要先用插入结点连接其插入所在点的结点的后继结点,这是单链表的要求,这是为了在连接时不断链,否则就断链了。而双向链表则不一定要这样,因为他是双向的,在每一个结点上。说他的前导结点与后继结点都是可以互换的,所以插入时可以不一定按照单链表的中的先后顺序,双向链表接入只要保证一条,接入点相关的四个指针域都已连接,而且前后互连。至于先修改哪个结点的的哪个指针域,LZ可以自己决定,只要你保证不会丢掉指针域,都有机会连到它该连到的地方;
现结出以你的单链表视角处理双链表插入问题的方案,供参考:
1,看成向右的单链表时的处理步骤:
C->R_Link=A->R_Link;
A->R_link=C;
2,看成向左的单链表时的处理步骤:
C->L_Link=(C->R_Link)->L_Link;
(C->R_Link)->L_Link=C
[解决办法]