链表是由一组任意的存储单元存储线性表的数据单元,链表由两部分组成:结点(数据域)、指针域。整个链表的存取必须从头指针开始,头指针指向第一个结点,最后一个结点指向为空。java中没有指针概念,但是java中有引用,可以用引用代替指针。
下面是我写的一个例子:
package com.test.linked; public class newlinkList { public class Node{ private Object data; private int index; private Node next; public Node(int index,Object data){ this.index=index; this.data=data; } public String toString(){ return index+"...."+data.toString(); } } private Node header; private int size=0; /** * 在头插入 * @param index * @param o */ public void insertFirst(int index,Object o){ if(header==null){ header=new Node(0,0); } Node node=new Node(index,o); node.next=header.next; header.next=node; size++; } /** * 在特定位置插入(在该位置后面插入) * @param key * @param index * @param o */ public void insertByKey(int key,int index,Object o){ Node p=findList(key); Node node=new Node(index,o); node.next=p.next; p.next=node; size++; System.out.println("insertByKey finished"); } /** * 在头删除 */ public void deleteFirst(){ if(size>0){ header.next=header.next.next; size--; }else{ System.out.println("链表已为空!"); } } public int size(){ return size; } /** * 删除特定位置元素 * @param key */ public void deleteByKey(int key){ Node previous=header; Node p=header; while(p.index!=key){ if(p.next==null){ System.out.println(" can't find!"); }else{ previous=p; p=p.next; } } previous.next=previous.next.next; System.out.println(previous); } /** * 链表展示 */ public void displayList(){ Node p=header; System.out.println("List (header..last) "); while(p.next!=null){ p=p.next; System.out.println(p.toString()); } } /** * 通过key查找,可扩展,如果key相同多个node通过equals方法找到对象 * @param key * @return */ public Node findList(int key){ Node p=header; while(p.index!=key){ if(p.next==null){ System.out.println(" can't find!"); return null; }else{ p=p.next; } } System.out.println("find this Node"); return p; } public static void main(String[] args){ newlinkList list=new newlinkList(); list.insertFirst(1,"NO.1"); list.insertFirst(2,"NO.2"); list.insertFirst(3,"NO.3"); list.displayList(); //list.deleteFirst(); //System.out.println(list.findList(2).toString()); //list.displayList(); list.insertByKey(2, 6, "I'm be inserted"); //list.displayList(); list.deleteByKey(6); list.displayList(); } }
输出结果:
List (header..last) 3....NO.3 2....NO.2 1....NO.1 find this Node insertByKey finished 2....NO.2 List (header..last) 3....NO.3 2....NO.2 1....NO.1
时间: 2024-11-20 21:57:38