一直没好好整理一下数据结构的东西,今天趁着有空,就用java实现了单链表结构的定义、创建等,希望对大家有帮助。 public class LinkedListTest { //计算单链表的长度 public static int LenOfList(ListNode head) { if(head==null) return 0; int count=0; while(head.next!=null) { count++; head=head.next; } return count; } //打印单链表 public static void displayList(ListNode head) { if(head==null) return; ListNode p=head.next; while(p!=null) { if(p.next!=null) System.out.print(p.val+"->"); else System.out.print(p.val+""); p=p.next; } } //头插法创建单链表 public static ListNode MakeListFromHead(int[] arr, int len) { if(len<=0) return null; ListNode head=new ListNode(0); ListNode tmp; for(int i=0; i<len; i++) { tmp=new ListNode(arr[i]); if(head.next==null) head.next=tmp; else { tmp.next=head.next; head.next=tmp; } } return head; } //尾插法建单链表 public static ListNode MakeListFromTail(int[] arr, int len) { if(len<=0) return null; ListNode head=new ListNode(0); ListNode tail=head; ListNode tmp; for(int i=0; i<len; i++) { tmp=new ListNode(arr[i]); if(head.next==null) { tail=tmp; head.next=tail; } else { tail.next=tmp; tail=tmp; } } return head; } //删除单链表中第i个节点,它的位序对应i-1 public static void DeleteIthNode(ListNode head, int i) { if(head==null) return; if(i<1 i="">LenOfList(head)) throw new IndexOutOfBoundsException("索引越界"); int j=0; ListNode pre=head.next; if(i==1) head.next=head.next.next; else { while(j!=i-2) { pre=pre.next; j++; } pre.next=pre.next.next; } } //将一个新节点插入到位序为i的位置上,注意i是位序 public static void InsertNode(ListNode head, int i, int newElement) { if(i<0 i="">LenOfList(head)) throw new IndexOutOfBoundsException("索引越界"); ListNode p=new ListNode(newElement); if(head==null) { head.next=p; } else { int j=0; ListNode tmp=head; while(j!=i) { tmp=tmp.next; j++; } p.next=tmp.next; tmp.next=p; } } //在单链表中搜索指定元素,若存在则返回该元素的位序,不存在就返回-1 public static int getIndexOfEle(int element, ListNode head) { if(head==null) return -1; ListNode tmp=head.next; int j=0; while(tmp!=null) { if(tmp.val==element) return j; else { tmp=tmp.next; j++; } } return -1; } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub int[] arr = new int[10]; for(int i=0; i<10; i++) arr[i]=i+1; System.out.println("头插法创建单链表:"); ListNode linkList1=MakeListFromHead(arr,10); displayList(linkList1); System.out.println(); System.out.println("尾插法创建单链表:"); ListNode linkList2=MakeListFromTail(arr,10); displayList(linkList2); System.out.println(); System.out.println("求单链表linkList1的长度:"); System.out.println(LenOfList(linkList1)+""); System.out.println("删除单链表linkList1中的第i个元素:"); DeleteIthNode(linkList1,5); displayList(linkList1); System.out.println(); System.out.println("在单链表linkList2中位序为i的位置插入一个新元素:"); InsertNode(linkList2,10,12); displayList(linkList2); System.out.println(); System.out.println("在单链表linkList2中寻找特定元素:"); System.out.println(getIndexOfEle(8,linkList2)); } } class ListNode{ public int val; public ListNode next; public ListNode(int val) { this.val=val; this.next=null; } } </0></1>