本文共 3953 字,大约阅读时间需要 13 分钟。
2021.05.03
package per.zhangyh.algorithm.data_structure.code;/** *@author:zhangyonghui; *@date: 2021/5/3; 9:30 *@Describe:一个单链表的节点 */public class SingleListNode { private int data; //链表的数据; private SingleListNode nextNode; //模拟链表中的指针,指向下一个节点; /*写一个构造方法,以便于规定构造对象的时候就必须将节点数据赋进去:*/ public SingleListNode(int data) { this.data = data; } /** * 描述:追加节点 */ public void appendNode(SingleListNode tempNode) { //如果当前节点有下一个节点,则一直找下一个节点;直至没有下一个节点了,然后进行追加; SingleListNode currentNode = this; while (true) { SingleListNode nextNode = currentNode.getNextNode(); //当前节点没有下一个节点了,作为递归出口,然后进行追加节点; if (nextNode == null) { break; } //当前节点有下一个节点,则继续找下去: currentNode = nextNode; } //进行追加节点: currentNode.setNextNode(tempNode); } /** * 删除下一个节点; * 描述:由于这是一个单链表,即只能找到下一个节点、找不到上一个节点,所以这里只能够删除下一个节点,无法进行删除当前节点; * 思路: 先找出当前节点的下下一个节点,然后将当前节点的下一个节点改为指向下下一个节点,即可。 */ public void removeNextNode() { SingleListNode currentNode = this; //找出下下一个节点: if (currentNode.getNextNode() == null) { //如果当前节点已经是最后一个节点了; System.out.println("当前节点已经是最后一个节点,所以无法删除该节点的下一个节点!"); } else { SingleListNode nextNextNode = currentNode.getNextNode().getNextNode(); //将当前节点的下一个节点改为指向下下一个节点 currentNode.setNextNode(nextNextNode); } } /** * 插入一个节点; * 思路:将现有节点的下一个节点变为下下一个节点;将新节点变为现在节点的下一个节点; */ public void insertNode(SingleListNode newNode) { //当前节点的下一个节点: SingleListNode nextNode=this.getNextNode(); //将新节点变为现在节点的下一个节点: this.setNextNode(newNode); //将原来的下一个节点变更为新节点的下一个节点: newNode.setNextNode(nextNode); } /** * 描述:附加方法,显示当前的链表; */ public void showList() { SingleListNode currentNode = this; while (true) { System.out.print(currentNode.getData()+" "); SingleListNode nextNode = currentNode.getNextNode(); //下一个节点 if (nextNode == null) { break; }else{ currentNode = nextNode; } } } //get、set方法; public int getData() { return data; } public void setData(int data) { this.data = data; } public SingleListNode getNextNode() { return nextNode; } public void setNextNode(SingleListNode nextNode) { this.nextNode = nextNode; }}
package per.zhangyh.algorithm.data_structure.Test;import per.zhangyh.algorithm.data_structure.code.SingleListNode;/** *@author:zhangyonghui; *@date: 2021/5/3; 10:00 *@Describe:单链表测试 */public class SingleListNodeTest { public static void main(String[] args) { //新建几个单链表节点,(同时并进行赋值): SingleListNode node1 = new SingleListNode(1); SingleListNode node2 = new SingleListNode(2); SingleListNode node3 = new SingleListNode(3); SingleListNode node4 = new SingleListNode(4); //追加节点: node1.appendNode(node2); node1.appendNode(node3); node1.appendNode(node4); //正确的追加应该是:1-2-3-4 int data2 = node1.getNextNode().getData(); System.out.println("正确的数值应该是2 = " + data2); int data3 = node1.getNextNode().getNextNode().getData(); System.out.println("正确的数值应该是3 = " + data3); int data4 = node1.getNextNode().getNextNode().getNextNode().getData(); System.out.println("正确的数值应该是4 = " + data4); //显示当前链表: System.out.println("当前链表:"); node1.showList(); //删除下一个节点: node2.removeNextNode(); System.out.println("\r\n删除节点2的下一个节点之后的新链表:"); node1.showList(); //插入一个节点: System.out.print("\r\n插入一个节点之前的当前链表:"); node1.showList(); SingleListNode newNode = new SingleListNode(3); //新结点 //插入: node2.insertNode(newNode); System.out.print("\r\n插入一个节点之后的当前链表:"); node1.showList(); }}
转载地址:http://aytzi.baihongyu.com/