《链表总结》

来源:互联网 发布:个人简介网站html源码 编辑:程序博客网 时间:2024/05/21 14:45

 前一阶段我们学习了链表,感觉和C语言一样;

一、链表:链表有头指针head。每一个指针有两个区域,一个是数据域data,另一个是指针域next 。

二、然后就是写一个链表接口。里面有一些方法,1、得到链表长度size()      2、向链表结尾处增加指针结点add(Object value)      3、在指定位置(Index)添加指针结点add(Object value,int Index)     4、得到指定位置(Index)的节点get(int Index)      5、删除指定位置的结点remove(int Index)。

三、然后再写一个类实现接口。

四、最后再写一个类,用于运行链表方法

/**

 * 先创建一个指针类

 */

public class NodeDemo {
//先定义指针的数据域
private Object value;

//定义指针的引用域
private NodeDemo next;

/**

*创建构造方法

*value--是指针的数据

*next--是指针的结点

*/
public NodeDemo(Object value, NodeDemo next) {
super();
this.value = value;
this.next = next;
}

//-------下面是value和next 的get 和set 的方法---------
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
public NodeDemo getNext() {
return next;
}
public void setNext(NodeDemo next) {
this.next = next;
}

}



/**

 *写一个链表接口,包含一些链表方法

 */

public interface LinkListInterface {
/**
* 实现返回链表的长度
* @return
*/
public int size();
/**
* 实现指针的增
* @param value 增加的内容
*/
public void add(Object value);
/**
* 实现指针在固定位置的增
* @param value 增加的内容
* @param Index 增加内容所在位置
*/
public void add(Object value,int Index);
/**
* 实现指针的查
* @param Index 所得到结点的位置
* @return
*/
public Object get(int Index);
/**
* 实现删除指定位置的结点
* @param Index 被删除结点所在位置
*/
public void remove(int Index);
}



/**

 *写一个链表类,实现链表接口

 */

public class MyLinkList implements LinkListInterface{
//定义头指针
public NodeDemo head;
@Override
public int size() {
int count = 0;
if(head == null){
return count;
}else{
//有头结点,count+1
count++;
NodeDemo node = head.getNext();
while(node != null){
count++;
node = node.getNext();
}
}
return count;
}
@Override
public void add(Object value) {
//创建新节点
NodeDemo node = new NodeDemo(value,null);
if(size() == 0){
head = node;
}else{
NodeDemo nodeParent = get(size()-1);
nodeParent.setNext(node);
}
}
@Override
public void add(Object value, int Index) {
NodeDemo node = new NodeDemo(value,null);
if(Index < 0){
System.out.println("位置不能为负!");
}
if(head == null){
head = node;
return ;
}
if(Index == 0){
node.setNext(head);
head = node;
return ;
}
NodeDemo node_current = get(Index);
NodeDemo node_parent = get(Index-1);
node_parent.setNext(node);
node.setNext(node_current);
}
@Override
public NodeDemo get(int Index) {
if(Index<0){
System.out.println("角标不能为负!");
}
int count = 0;
if(Index == count){
return head;
}
if(Index<size()){
NodeDemo node = head.getNext();
while(node != null){
count++;
if(Index == count){
return node;
}
node = node.getNext();
}
}
return null;
}
@Override
public void remove(int Index) {
if(size()==0){
System.out.println("链表为空!");
}else if(Index == 0){
NodeDemo node = get(Index+1);
head = node;
}else if(Index < size()-1){
NodeDemo node_current = get(Index+1);
NodeDemo node_parent = get(Index-1);
node_parent.setNext(node_current);
}else if(Index == size()-1){
NodeDemo node_parent = get(Index-1);
node_parent.setNext(null);
}
}
}




/**

 *写一个类,用于运行链表方法

 */

public class NodeTest {


public static void main(String[] args) {
MyLinkList list = new MyLinkList();
list.add("zhangsan");
list.add(1236);
list.add(true);
list.add("value");

System.out.println(list.size());
System.out.println(list.get(0).getValue());
System.out.println(list.get(1).getValue());
System.out.println(list.get(2).getValue());
System.out.println(list.get(3).getValue());
list.remove(0);
list.remove(1);
list.add(45789, 0);
System.out.println(list.size());
System.out.println(list.get(0).getValue());
System.out.println(list.get(1).getValue());
System.out.println(list.get(2).getValue());
// System.out.println(list.get(3).getValue());
}

0 0
原创粉丝点击