以下是关于矩阵转换成双向链表的相关代码:
- class Node {
- public int data;
- public Node llink;
- public Node rlink;
- }
- public class doublelink1 {
- public static void main(String[] args) {
- int a[] = {3, 4, 5, 7, 8, 1, 3, 9, 8, 11};
- Node head = new Node();
- Node x, current;
- current = head;
- for (int i = 0; i < a.length; i++) {
- x = new Node();
- x.data = a[i];
- current.rlink = x;
- current = current.rlink;
- }
- current.rlink=current.llink = null;
- current = head.rlink;
- while (current.rlink !=null) {
- System.out.print(current.data + " ");
- current = current.rlink;
- }
- System.out.println();
- }
- }
执行结果:
3 4 5 7 8 1 3 9 8 11
问题:搞不清楚指向问题,虽然一样有执行结果,但这是单向链结的感觉,我对这图的概念虽然画了出来,我只有在声明4项比较的时候看的出来,详细该如何解释执行呢?
分析:对于以下for循环
- for (int i = 0; i < a.length; i++) {
- x = new Node();
- x.data = a[i];
- current.rlink = x;
- current = current.rlink;
- }
这裡只有设定右连结而已,没有左连结,当然左连结就没有作用。那么可以尝试如下的修改方法:
- current.rlink = x;//右连结指向新节点
- x.llink=current;//新节点的左连结也要接过来,
- current = current.rlink;
补充说明:还有第28行的current.rlink=current.llink = null;也要改掉,
不能让左llink也等于null,这样会断了最后一个节点的左连结。
依你的设计方式,你可以以while (current.llink !=head)往左走。
编者经验:对于双向链表的问题,记得在C++教科书《链表》的章节里有详细的解释,其实对于链表关键是不能打破其数据结构。
关于双向链表的知识 我们可以参考 在IBM官网上分享的一篇知识《深入分析 Linux 内核链表》。作者: 杨沙洲,目前在国防科技大学计算机学院攻读软件方向博士学位。对文中存在的技术问题,欢迎向 pubb@163.net质疑。详细地址见参考资料。
本文参考资料:
1、百度百科《双向链表》 http://baike.baidu.com/view/1627720.htm
2、深入分析 Linux 内核链表 http://www.ibm.com/developerworks/cn/linux/kernel/l-chain/
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
