黑马程序员技术交流社区
标题:
自己实现LinkedList的小练习
[打印本页]
作者:
WosLovesLife
时间:
2015-10-27 21:22
标题:
自己实现LinkedList的小练习
看对LinkedList的讲解的时候非常晕,于是就自己动手做做,为了加深理解。下面是简单的LinkedList实现,并不完整,只是实现了添加获取和删除。
package LinkedListTest151026;
import java.util.Scanner;
public class Node {
Node previous;
Object obj;
Node next;
public Node() {
super();
}
public Node(Node previous, Object obj, Node next) {
super();
this.previous = previous;
this.obj = obj;
this.next = next;
}
Node first;
Node last;
int size;
public void add(Object obj){
Node n = new Node();
if (first == null) {
n.previous = null;
n.obj = obj;
n.next = null;
first = n;
last = n;
}else{
n.previous = last;
n.obj = obj;
n.next = null;
last.next = n;
last = n;
}
size++;
}
public Object get(){
Node temp = new Node();
Scanner sc = new Scanner(System.in);
int index = sc.nextInt();
if (first==null) {
System.out.println("该链表为空");
}else{
if (index>=size || index <0) {
System.out.println("索引超出链表大小");
}else{
temp = first;
for (int i = 0; i < index; i++) {
temp = first.next;
}
}
}
return temp.obj;
}
public Object get(int index){
Node temp = new Node();
if (first==null) {
System.out.println("该链表为空");
}else{
if (index>=size || index <0) {
System.out.println("索引超出链表大小");
}else{
temp = first;
for (int i = 0; i < index; i++) {
temp = temp.next;
}
}
}
return temp.obj;
}
public void remove(int index){
Node temp = null;
if (first == null) {
}else{
if (index>=size || index <0) {
System.out.println("索引超出链表大小");
}else {
temp = first;
if (index == 0) {
first = temp.next;
first.previous=null;
size--;
}else if (index == size-1) {
temp = last;
last = temp.previous;
last.next = null;
size--;
}else{
int a = 0;
for (int i = 0; i <= index; i++) {
temp = temp.next;
a ++;
if (a==index) {
temp.previous.next = temp.next;
temp.next.previous = temp.previous;
size--;
}
}
}
}
}
}
public void inset(){
}
}
复制代码
下面是测试代码
package LinkedListTest151026;
import java.util.Scanner;
public class LinkedTest {
public static void main(String[] args) {
//创建Node对象
Node n = new Node();
//像Node链n中添加对象
n.add("wos loves life");
n.add("mylover");
n.add("66");
n.add("yanhua");
//当前链表内容
LinkedTest.showNode(n);
System.out.println();
//输出n,可以看到n是一个地址。
System.out.println(n);
//测试获取方法,从控制台输入index
String s = (String) n.get(0);
System.out.println(s);
//测试获取方法,既定index2
s = (String) n.get(2);
System.out.println(s);
System.out.println("-------------------------");
//测试remove
System.out.println(n.size);//当前链表大小,4
n.remove(1);
s=(String)n.get(1);//删除第二个元素
System.out.println(s+"\r"+n.size);//当前大小,3
System.out.println("-------------------------");
/*调用工具方法遍历链表中的元素
(因为我添加的时候都是Stirng,所以强转为了String)
如果是多种类型对象,就不能这样遍历。*/
LinkedTest.showNode(n);
System.out.println("-------------------------");
//测试删除第一个,当前第一个是wos loves life
n.remove(0);
LinkedTest.showNode(n);
//测试删除最后一个,当前最后一个是yanhua
n.remove(1);
LinkedTest.showNode(n);
}
public static void showNode(Node n){
Node temp = n.first;
String s;
s =(String)temp.obj;
System.out.println(s);
for (int i = 1; i <n.size ; i++) {
temp = temp.next;
s = (String)temp.obj;
System.out.println(s);
}
System.out.println("-------------------------");
}
}
复制代码
作者:
419798721
时间:
2015-10-27 23:57
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2