Java实现单链表的一些常用操作
2015-08-22 16:06
627 查看
一直没好好整理一下数据结构的东西,今天趁着有空,就用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>
相关文章推荐
- 去哪网实习总结:JAVA读XML文件节点信息(JavaWeb)
- swing和java里嵌入浏览器
- struts2学习笔记
- maven:Eclipse使用maven获取spring官网架包
- java 注解的几大作用及使用方法详解(完)
- java多线程学习生产者消费者
- 【转】8张图理解Java
- java8新增特性(二)----函数式接口(Functional)
- java实体类实现序列化的意义
- java 制作证书的工具keytool用法总结
- AOP 之 6.2 AOP的HelloWorld ——跟我学spring3
- Java_Annotation详解
- Java注解Annotation详解
- 安装JavaJDK,三步搞定。
- 对JAVA集合进行遍历删除时务必要用迭代器
- leetcode--Shortest Word Distance
- [转载]Java几款性能分析工具的对比
- Spring AOP Example – Advice
- 这几天在研究java中的内存分配问题,谈谈堆栈
- JAVA关于Fat Jar打包注意事项