您的位置:首页 > 其它

2017.08.13单向链表

2017-08-13 00:00 274 查看
老婆去总公司培训第十天了,挺想她

_________________________________________________________________________________



如果要想实现链表,则肯定要设计一个链表的节点类,在此类中必须有一个属性能保存下一个节点的地址

示例:

class Node{		//定义节点类
private String data;		//保存节点内容
private Node next;		//表示保存下一个节点
public Node(String data){	//通过构造设置节点内容
this.data = data;	//设置内容
}
public void setNext(Node next){
this.next = next;	//设置下一个节点
}
public Node getNext(){		//取得下一个节点
return this.next;
}
public String getData(){
return this.data;	//取得节点的内容
}
}
public class Test55{
public static void main(String args[]){
Node root = new Node("火车头");		//定义根节点
Node n1 = new Node("车厢 - A ");	//定义第一个车厢(第一个节点)
Node n2 = new Node("车厢 - B ");	//定义第二个车厢(第二个节点)
Node n3 = new Node("车厢 - C ");	//定义第三个车厢(第三个节点)
root.setNext(n1);			//设置火车头的下一个节点是第一个车厢A
n1.setNext(n2);
n2.setNext(n3);				//依次设置节点
printNode(root);			//从头开始输出
}
public static void printNode(Node node){		//输出节点
System.out.print(node.getData() + "\t");	//输出节点的内容
if(node.getNext()!=null){			//判断此节点是否存在下一个节点
printNode(node.getNext());		//向下继续输出
}
}
}

将现在的节点增加以下操作:增加数据,查找数据,删除数据:

class Link{				//链表的完成类
class Node{			//保存每一个节点,此处为了方便直接定义成内部类
private String data;		//保存节点内容
private Node next;		//保存下一个节点
public Node(String data){
this.data = data;	//通过构造方法设置节点内容
}
public void add(Node newNode){		//将节点加入到合适的位置
if(this.next == null){		//如果下一节点为空,则把新节点设置到next
this.next = newNode;
}else{				//如果不为空,则需要向下继续寻找
this.next.add(newNode);
}
}
public void print(){
System.out.print(this.data + "\t");
if(this.next!=null){
this.next.print();
}
}
public boolean search(String data){		//查找
if(data.equals(this.data)){
return true;
}else{
if(this.next!=null){
return this.next.search(data);
}else{
return false;
}
}
}
public void delete(Node previous,String data){
if(data.equals(this.data)){
previous.next = this.next;
}else{
if(this.next!=null){
this.next.delete(this,data);
}
}
}
}
private Node root;				//设置链表的根节点
public void addNode(String data){		//增加节点
Node newNode = new Node(data);		//定义新节点
if(this.root==null){			//没有根节点
this.root = new Node(data);	//将第一个节点设置成根节点
}else{
this.root.add(newNode);		//不是根节点,放到合适位置,调用add方法
}
}
public void printNode(){
if(this.root!=null){
this.root.print();
}

}
public boolean contains(String name){			//判断元素是否存在
return this.root.search(name);
}
public void deleteNode(String data){
if(this.contains(data)){
if(this.root.data.equals(data)){
this.root = this.root.next;
}else{
this.root.next.delete(root,data);
}
}
}
}
public class Test56{
public static void main(String args[]){
Link l = new Link();
l.addNode("车厢-A");
l.addNode("车厢-B");
l.addNode("车厢-C");
l.addNode("车厢-D");
l.printNode();
System.out.println("\n" + l.contains("车厢-C"));
l.deleteNode("车厢-C");
l.deleteNode("车厢-D");
l.printNode();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: