双链表

tech2024-11-28  10

双链表

一、添加

package com.love.xu.doubleLinkedList; /** * 双向链表 * * @author:下一个一千年 * @date:2020/9/3 */ public class DoubleLinkedList { //创建一个头节点,头节点不要动,不放具体数据 private LinkNode head = new LinkNode(0,"",""); //返回头节点 public LinkNode getHead(){ return head; } public void add(LinkNode linkNode){ //因为头节点不能动,我们需要一个辅助变量,把temp当作指针一个一个向后移动 LinkNode temp = head; //遍历链表 while (true){ if(temp.next == null){ break; } //如果没有找到就向后移动 temp = temp.next; } //当推出while循环时,链表指向最后节点temp(最后节点的next为null) //形成一个双向链表 temp.next = linkNode; linkNode.pre = temp; } /** * 修改某一结点 * @param linkNode */ public void update(LinkNode linkNode){ if(head.next == null){ System.out.println("链表为空"); return; } //找到需要修改的节点 //定义一个辅助节点 LinkNode temp = head.next; boolean flag = false; while (true){ if(temp == null){ break; //已经遍历完 } if(temp.no == linkNode.no){ //找到 flag = true; break; } temp = temp.next; } if(flag){ temp.name = linkNode.name; temp.nickname = linkNode.nickname; }else { //没有找到 System.out.printf("没有找到 编号 %d 的节点,不能修改",linkNode.no); } } /** * 删除节点 * */ public void del(int no){ if (head.next == null){ System.out.println("链表为空,无法删除"); return; } LinkNode temp = head; boolean flag = false; while (true){ if(temp.no == no){ //找到了 flag = true; break; } temp = temp.next; } if(flag){ temp.pre.next = temp.next; if(temp.next != null){ temp.next.pre = temp.pre; } }else { System.out.println("找不到"+no+"节点"); } } /** * 遍历双向链表的方法 */ public void list(){ if(head.next == null){ System.out.println("链表为空"); return; } //因为头节点不能动 LinkNode temp = head.next; while (true){ if(temp == null){ break; } //输出节点的信息 System.out.println(temp); //将temp后移动 temp = temp.next; } } } class LinkNode { int no; String name; String nickname; LinkNode next; //指向下一个节点 LinkNode pre; //指向前一个节点 public LinkNode(int no, String name, String nickname) { this.no = no; this.name = name; this.nickname = nickname; } @Override public String toString() { return "LinkNode{" + "no=" + no + ", name='" + name + '\'' + ", nickname='" + nickname + '\'' + '}'; } }
最新回复(0)