java实现链表
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java实现链表相关的知识,希望对你有一定的参考价值。
今天和同学讨论时,他说java没有指针怎么实现链表。的确,在Java中没有指针。但是,Java中引用和C++中的引用有很大不同,而且具有一定指针的功能(过两天会总结)。所以,就在家用Java实现了一下链表这种数据结构。目前我想到了两种方法用Java实现链表:
1、Java允许类的定义中出现该类对象,所以可以通过对该类对象的引用实现链表。
2、可以通过定义一个基类,通过子类的向上转型。通过父类指针模拟C++中的指针类型,从而实现链表。
废话不多说,上代码:
方法1 Node.java:
package com.pasilo; public class Node { private int data; private Node next; public Node(){} public Node(int data){ this.data = data; this.next = new Node(); } public int getData(){ return this.data; } public void setData(int value){ this.data = value; } public Node getNext(){ return this.next; } public void setNewNext(int value){ Node newNode = new Node(value); this.next = newNode; } public void setNext(Node node){ this.next = node; } }
方法1 List.java:
package com.pasilo; public class List { private Node head; private Node current; public List(int data){ this.head = new Node(data); current = head; } public void append(int value){ current.setNewNext(value); current = current.getNext(); } public void remove(int destation){ Node pointer = this.head; for(int i=0;i<destation-1;i++){ pointer = pointer.getNext(); } Node temp = pointer.getNext().getNext(); pointer.setNext(temp); } public void insert(int destation,int value){ Node pointer = this.head; for(int i=0;i<destation-1;i++){ pointer = pointer.getNext(); } Node temp = pointer.getNext(); Node newNode = new Node(value); pointer.setNext(newNode); newNode.setNext(temp); } public int at(int index){ Node pointer = this.head; for(int i=0;i<index;i++){ pointer = pointer.getNext(); } return pointer.getData(); } public void display(){ Node pointer = this.head; while(current != pointer){ System.out.println("data is:"+pointer.getData()); pointer = pointer.getNext(); } System.out.println("data is:"+pointer.getData()); System.out.println("this is the end."); } public int size(){ int size = 1; Node pointer = this.head; while(current != pointer){ pointer = pointer.getNext(); size++; } return size; } public static void main(String[] args) { // TODO Auto-generated method stub List list = new List(4); list.append(4); list.append(1); list.append(2); list.insert(2, 10); list.display(); list.remove(2); list.display(); System.out.println(list.at(2)); System.out.println("size of the list:"+list.size()); } }
未完待续..........
以上是关于java实现链表的主要内容,如果未能解决你的问题,请参考以下文章
NC41 最长无重复子数组/NC133链表的奇偶重排/NC116把数字翻译成字符串/NC135 股票交易的最大收益/NC126换钱的最少货币数/NC45实现二叉树先序,中序和后序遍历(递归)(代码片段