永发信息网

pascal双向链表问题

答案:3  悬赏:20  手机版
解决时间 2021-01-06 23:56
  • 提问者网友:容嬷嬷拿针来
  • 2021-01-06 10:16
pascal双向链表问题
最佳答案
  • 五星知识达人网友:詩光轨車
  • 2021-01-06 11:04
该结构应该定义如下:
TNode = record
llink: PNode;
rlink: PNode;
...
end;

PNode = ^Tnode;

设三个节点分别为PL、P、PR,P的左节点为PL,右节点为PR。

那么变量定义如下:

var
PL, P, PR: PNode;

PL^.rlink := P; // (1)
PR^.llink := P; // (2)
P^.rlink := PR; // (3)
P^.llink := PL; // (4)

如果要删除节点P,要做如下处理:
PL^.rlink := PR; // (5)
PR^.llink := PL; // (6)
dispose(p);

由上面PL和PR定义转换代码如下:
P^llink^.rlink := P^.rlink; // 从(3) 和(4)代换(5)中的PL、PR
P^rlink^.llink := P^.llink; // 从(3) 和(4)代换(6)中的PL、PR
=====================
检查A的第一行代码:
p^rlink^.llink=p^.rlink;
根据(3)可转换成 PR^.llink := PR; 显然是错误的方案。

检查B的第一行代码:
p^llink^.rlink=p^.llink;
根据(4)可转换成 PL^.rlink := PL; 显然是错误的方案。

检查C的第一行代码:
p^rlink^.llink := p^.llink;
根据(3)可转换成 PR^.llink := PL;等同(6) // (7)
检查C的第二行代码:
p^rlink^.llink^.rlink := p^.rlink;
根据(3)可转换成 PR^.llink^.rlink := PR;
根据(7)可转换成 PL^.rlink := PR; 等同(5)
所以C是正确的方案。

检查D的第一行代码:
p^llink^.rlink=p^.rlink;
根据(3)、(4)可转换成 PL^.rlink := PR; 等同(5) // (8)
检查D的第二行代码:
p^llink^.rlink^.llink=p^.llink;
根据(4)可转换成 PL^.rlink^.llink := PL;
根据(8)可转换成 PR^.llink := PL; 等同(6)
所以D是正确的方案。
全部回答
  • 1楼网友:鸠书
  • 2021-01-06 12:02
。。。
  • 2楼网友:北方的南先生
  • 2021-01-06 11:57
不是pascal语言
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯