单向链表(singleLinkedList) java实现
来源:互联网 发布:java画五角星 编辑:程序博客网 时间:2024/06/06 01:33
package com.important.data.struct.LinkedListSingle;public class SingleLinkedList{ public static void main(String[] args) { SingleLinkedListType<String> singleLinkedListType = new SingleLinkedListType<>(); for(int i=0;i<5;i++){ String temp = i+""; singleLinkedListType.add(temp); } System.out.println("单链表的大小: "); System.out.println(singleLinkedListType.size());// System.out.println("单链表的第一个位置处的值为: ");// System.out.println(singleLinkedListType.get(1)); System.out.println("单链表为:"); singleLinkedListType.println();// singleLinkedListType.add(0, "xixi");// singleLinkedListType.println();// singleLinkedListType.addFirst("kaishi");// singleLinkedListType.println();// System.out.println(singleLinkedListType.size());// singleLinkedListType.remove(2);// singleLinkedListType.println();// singleLinkedListType.removeTail();// singleLinkedListType.println(); singleLinkedListType.reverse(); System.out.println("链表反转之后的链表为: "); singleLinkedListType.println(); }}class SingleLinkedListType<T>{ //静态内部类表示单链表的节点 private static class Node<T>{ public T date; //数据域 Node<T> next; //后指针 @SuppressWarnings("unused") public Node(T d,Node<T> n){ date = d; next = n; } public Node(T d){ date = d; next = null; } } private int theSize; private Node<T> head; public SingleLinkedListType() { clear(); } //清除 public void clear(){ theSize = 0; head = null; } //大小 public int size(){ return theSize; } //添加结点 public void add(T x){ Node<T> newNode = new Node<T>(x); if(head == null){ head = newNode ; }else { Node<T> pNode = head; while(pNode.next!=null){ pNode = pNode.next; } pNode.next = newNode; } theSize++; } //插入节点 public void add(int index ,T x){ checkRange(index); Node<T> pNode = getNode(index); Node<T> newNode = new Node<T>(x); newNode.next = pNode.next; pNode.next = newNode; theSize++; } //加在头节点 public void addFirst(T x){ Node<T> newNode = new Node<T>(x); newNode.next = head; head =newNode; theSize++; } //检查index是否越界 public void checkRange(int index){ if (index<0 || index > size()) throw new IndexOutOfBoundsException(outOfBoundsMsg(index)); } private String outOfBoundsMsg(int index) { return "Index: "+index+", Size: "+size(); } //获取节点数据 public T get(int index){ Node<T> pNode = getNode(index); return pNode.date; } //获取节点 public Node<T> getNode(int index){ checkRange(index); Node<T> pNode = head; for(int i=0;i<index;i++){ pNode = pNode.next; } return pNode; } //删除尾节点 public void removeTail(){ remove(size()-1); theSize--; } //删除节点 public void remove(int index){ checkRange(index); Node<T> pNode = getNode(index); Node<T> temp = head; for(int i=0;i<index-1;i++){ temp = temp.next; } temp.next = pNode.next; pNode.next = null; theSize--; } //输出 public void println(){ Node<T> pNode = head; while(pNode!=null){ System.out.print(pNode.date+" "); pNode = pNode.next; } System.out.println(); } //实现反转 public void reverse(){ Node<T> pre = head; //前一个节点 Node<T> curr = head.next; //当前节点 Node<T> next ; //中介节点 作为临时跳转 while(curr!=null){ next = curr.next; //提取出当前节点的下一个节点 保存到临时节点中 curr.next = pre; //当前节点的前一个节点作为当前节点的下一个节点,刚好实现反转 pre = curr; //此时当前节点则为下一次反转的当前节点的前一个节点 curr = next; //当前节点的下一个节点此时为下一次反转的当前节点 } head.next = null; // head = pre; //当前节点的前一个节点作为头节点 即最开始的节点 }}
0 0
- 单向链表(singleLinkedList) java实现
- java 实现单向链表
- java实现单向链表
- java 单向链表实现
- java实现单向链表
- Java 实现单向链表
- java实现单向链表
- 单向链表--java实现
- java 单向链表实现
- [Java]单向链表实现
- Java 实现单向链表
- java实现单向链表
- JAVA单向链表实现
- java 实现单向链表
- Java实现单向链表
- 单链表的实现---SingleLinkedList
- 单向链表实现归并排序(Java实现)
- java实现单向链
- VS2003"无法启动调试 没有正确安装调试器"的解决方法
- 关系数据库比较:SQLite vs MySQL vs PostgreSQL
- 《最优化方法及其Matlab程序设计》马昌凤 部分习题答案
- 面试大总结之一:Java搞定面试中的链表题目
- 一步步构建大型网站架构
- 单向链表(singleLinkedList) java实现
- ARC forbids explicit message send of 'retainCount'
- 多文档工程分割窗口
- Quartz定时任务
- jquery multiselect 赋初始值
- 【Linux导论】Linux发行版安装(Linux Distribution Installation)
- 抽奖转盘的jquery实现
- 类的加载机制和反射
- mesos和Elasticsearch设计(Docker部署)(三)