[记录]Java---实现简单的链表

一个简单的链表,顺便复习一下C
// 1、定义一个节点类 Node.java:

package Java链表;
/**
 * 	@author 高攀
 *	节点的定义(相当于C语言的结构体)
 */
public class Node {
	
	public Object data;//数据域。
	public Node next;//下一个节点。
	
	public Node(){
		
	}
	public Node(Object data) {
		//构造函数给数据域赋初值。
		this.data = data;
	}
}

// 2、编写链表类 LinkList.java

package Java链表;

import java.util.ArrayList;

/**
 * @author 高攀 
 *
 */

public class LinkList {

	public Node head = null;//头结点
	//创建将要对链表进行操作的两个引用(指针)
	public Node p = null;
	public Node q = null;
	
	//创建链表
	public void createList(ArrayList o){
		
		head = new Node();
		q = head; //用q取得head
		for (int i = 0; i < o.size(); i++) {
			 p = new Node(o.get(i)); //新建节点
			 q.next = p;
			 q = q.next;//把q后移
		}
		p.next = null; //最后把链表设为null。
	}
	//显示链表中所有元素
	public void showList(){
		
		if(head!=null){//如果创建了链表才执行显示链表
			Node n = head;
			System.out.println("更新链表后:");
			while(n.next!=null){
				n = n.next;
				if(n.next==null){
					System.out.print(n.data);
				}else{
					System.out.print(n.data+"--->");
				}
			}
		}else{
			System.out.println("您还没有创建链表!不能进行任何操作!");
		}
	}
	//增
	public void addList(Object o){
		
		if(head!=null){//如果创建了链表才执行添加链表
			q = head;
			System.out.println("你添加后的链表是:");
			while(q!= null){
				
				if(q.next==null){//找到了最后一个节点
					p = new Node(o);
					q.next = p;
					p.next = null;
					showList();
					break;
				}
				q = q.next;
			}
		}else{
			System.out.println("您还没有创建链表!不能进行任何操作!");
		}
	}
	//删
	public void removeList(Object o){
		if(head!=null){//如果创建了链表才执行删除链表
			q = head;
			System.out.println("你删除后的链表是:");
			while(q!= null){
				p = q.next;//p是q的下一个 
				if(p.data.equals(o)){//找到了该 删除的节点的话
					if(p.next == null){//如果是尾节点
						p = null;
						q.next = null;
						showList();
						break;
					}else{
						//移除这个节点
						p = p.next;
						q.next = p;
						showList();
						break;
					}
				}
				q = q.next;//q一直后移
				
			}
		}else{
			System.out.println("您还没有创建链表!不能进行任何操作!");
		}
		
	}
	//查
}

// 3、测试类 TestLink.Java

package Java链表;
import java.util.ArrayList;
import java.util.Scanner;

/**
 * @author 高攀 
 *
 */

public class TestLink {

	public static void main(String[] args) {
		
		
		try {
			LinkList list = new LinkList();
			System.out.println("输入多长的链表?");
			Scanner sc = new Scanner(System.in);
			Scanner sc1 = new Scanner(System.in);
			Scanner sc2 = new Scanner(System.in);
			int s = sc.nextInt();
			ArrayList o = new ArrayList();
			System.out.println("输入你的数据:");
			for (int i = 0; i < s; i++) {
				o.add(sc.next());
			}
			list.createList(o);
			list.showList();
			System.out.println("添加:");
			Object oo = sc1.next();
			list.addList(oo);
			System.out.println("\n你要删除的元素:");
			Object ooo = sc2.next();
			list.removeList(ooo);
		} catch (Exception e) {
			e.printStackTrace();
			return ;
		}
		
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值