单链表之链表的构造

定义:链表是一种递归的数据结构,它或者为空,或者是指向一个结点的引用,该结点含有一个泛型的元素和一个指向另一条链的引用。

结点的构造

结点的构造,我们包括了对数据域和指针域的构造,当然如果需要用到多种数据,也可以构造多个数据域,也就形成了多元链表。

package LinkList;
public class Node<T> {
	public T data;
	public Node<T> next;
	// 带一个参数的构造函数
	public Node(T data)
	{
		this.data = data;
	}
	public Node(T data,Node<T> next)
	{
		this.data = data;
		this.next = next;
	}
	public Node(){
		this(null,null);
	}
}

  

链表的基本方法构造

链表方法的构造包括了一些对整条链表的数据的清除、判空、长度的判断、插入‘删除等基本操作。

public Node<T> head;
	public LinkList() 
	{
		head = new Node<T>();
	}
	public void clear() {                         //  清空单链表的方法
		// TODO Auto-generated method stub
		head.data = null;
		head.next = null;
	}
	public boolean isEmpty(){
		return head.next==null;
	}

	public int length() {                                     // 计算单链表的长度
		// TODO Auto-generated method stub  
		Node<T> p = head.next;
		int length = 0;
		while(p!=null)
		{
			p = p.next;
			++length;
		}
		return length;
	}
	public T get(int i) throws Exception {                 //  获取第i个位置的值
		// TODO Auto-generated method stub
		Node<T> p =head.next;
		int j = 0;
		while(p!=null&&j<i) {
			p = p.next;
			++j;
		}
		if(j>i||p==null)
		{
			throw new Exception("第"+i+"个元素不存在");
		}
		return p.data;
	}
	public void insert(int i,T x)throws Exception{      //将一个数插入链表中
		Node<T> p = head;
		int j=-1;
		while(p.next!=null&&j<i-1) {
			p=p.next;
			++j;
		}
		if(j>i-1||p==null)
			throw new Exception("插入位置不合法");
		Node<T> s=new Node<T>(x);
		s.next=p.next;
		p.next=s;
}
	public void remove(int i)throws Exception{     // 删除i处的值
		Node<T> p=head;
		int j=-1;
		while(p!=null&&j<i-1) {
			p=p.next;
			j++;
		}
		if(j>i-1||p==null)
			throw new Exception("删除位置不合法");
		  p.next=p.next.next;
	}

	public int indexOf(T x) {                         //  获取该值的单链表中的位置
		// TODO Auto-generated method stub 
		Node<T> p = head.next;
		int j=0;
		while(p!=null&&!p.data.equals(x)) {
			p=p.next;
			++j;
		}
		if(p!=null)
			return j;
		else
			return -1;
	}
	public void display() {                       // 对整条链表数据的打印
		Node<T> node=head.next;
		while (node!=null) {
			System.out.print(node.data+" ");
			node=node.next;
		}
		System.out.println();
	}

这些方法都是对链表的最基本应用,在后续的运用链表中都会大方面的运用到这些方法。


 

 

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值