分为双向链表和单向链表
单向链表
带头结点的单向链表注意事项
1)元素的地址并非连续
2)没有被引用的节点会被垃圾回收
3)最后一个节点的下一个节点指向空
4)即便链表为空,也会初始化一个头结点
//带头结点的单向链表代码实现public class SingleLinkedListDemo {public static void main(String[] args) {SingleLinkedList.HeroNode node1 = new SingleLinkedList.HeroNode(1,"曹操1","到1");SingleLinkedList.HeroNode node2 = new SingleLinkedList.HeroNode(2,"曹操2","到2");SingleLinkedList.HeroNode node3 = new SingleLinkedList.HeroNode(3,"曹操3","到3");SingleLinkedList.HeroNode node4 = new SingleLinkedList.HeroNode(4,"曹操4","到4");SingleLinkedList.HeroNode node5 = new SingleLinkedList.HeroNode(5,"曹操5","到5");SingleLinkedList.HeroNode newNode = new SingleLinkedList.HeroNode(4,"曹操666","到666");SingleLinkedList list = new SingleLinkedList();list.add(node1);list.add(node2);list.add(node3);list.add(node4);// list.addByOrder(node1);list.set(newNode);list.remove(366);System.out.println(list);}}class SingleLinkedList{private HeroNode head = new HeroNode(0,"","");//添加元素/节点public void add(HeroNode heroNode){HeroNode temp = head;while (true){//当下一个节点为空表示该节点为最后一个节点if(temp.next == null){break;}//将当前节点指向下一个节点temp = temp.next;}//最后一个节点的下一个节点为要添加的元素temp.next = heroNode;}//根据编号顺序进行添加,如果编号已存在,则显示已存在public void addByOrder(HeroNode heroNode){HeroNode temp = head;while(true){if(temp.next == null){break;}else if(temp.next.no>heroNode.no) {break;}else if (temp.next.no == heroNode.no){System.out.println("addByOrder()编号已存在");return;}temp = temp.next;}heroNode.next = temp.next;temp.next = heroNode;}//更新节点public void set(HeroNode newNode){HeroNode temp = head;while(true){temp = temp.next;if (temp == null){System.out.println("set()未找到该节点");return;}if (temp.no == newNode.no){temp.name = newNode.name;temp.nickname = newNode.nickname;return;}}}//删除节点public void remove(int no){HeroNode temp = head;while (true){if (temp.next == null){System.out.println("remove()未找到该编号");return;}if (temp.next.no == no){temp.next = temp.next.next;return;}temp = temp.next;}}//显示列表内容(遍历)public String toString(){if (head.next == null){return "toString()链表为空";}HeroNode temp = head.next;while (true){if (temp == null){break;}System.out.println(temp);temp = temp.next;}return "";}//定义节点static class HeroNode{int no;String name;String nickname;HeroNode next;public HeroNode(int no,String name,String nickname){this.no = no;this.name = name;this.nickname = nickname;}@Overridepublic String toString() {return "HeroNode{" +"no=" + no +", name='" + name + '\'' +", nickname='" + nickname + '\'' +'}';}}}
