数据结构与算法 单链表

Java数据结构和算法
上一篇主目录 下一篇

SingleLinkedListDemo.java

package linkedlist;

import linkedlist.LinkedListNode;
import java.util.Stack;

public class SingleLinkedListDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		SingleLinkedList sl=new SingleLinkedList();
		sl.add(1, 1);
		sl.add(2, 2);
		sl.add(3, 3);
		sl.add(4, 4);
		sl.add(5, 5);
		sl.add(6, 6);
		System.out.println("lenth:"+sl.getLength());
		sl.show();
		sl.del(5);
		System.out.println("lenth:"+sl.getLength());
		sl.show();
		sl.reverse();
		sl.show();
		System.out.println("showReverse:");
		sl.showReverse();
		
	}
	
	

}

/*链表结构,泛型类,,,由import linkedlist.LinkedListNode;引入
class LinkedListNode<T>{
	private T val;
	public LinkedListNode<T> next;
	public LinkedListNode(T val) {
		this.val=val;
	}
	public T getVal() {
		return val;
	}
}*/

//单向链表类
class SingleLinkedList{
	//先初始化一个头节点, 头节点不要动, 不存放具体的数据
	public LinkedListNode head;
	public SingleLinkedList() {
		head=new LinkedListNode();
	}

	
	//获取链表的长度
	public int getLength() {
		int count=0;
		LinkedListNode p=head.next;
		while(p!=null) {
			count+=1;
			p=p.next;
		}
		return count;
	}
	
	//添加节点到单向链表
	public void add(int val,int position) {
		if(position<0||position>(getLength()+1)) {
			System.out.println("invalid position");
		}else {
			LinkedListNode l=new LinkedListNode(val);
			LinkedListNode p=head;
			for(int i=0;i<position-1;i++) {
				p=p.next;
			}
			l.next=p.next;
			p.next=l;
			System.out.println("ok");
		}
	}
	
	//返回头节点
	public LinkedListNode getHead() {
		return head;
	}
	
	//删除某一个位置上的节点
	public void del(int position) {
		if(position<0||position>getLength()) {
			System.out.println("invalid position");
		}else {
			LinkedListNode p=head;
			for(int i=0;i<position-1;i++) {
				p=p.next;
			}
			p.next=p.next.next;
			System.out.println("ok");
		}
	}
	

	//修改某一个位置上的节点的值
	public void update(int position,int val) {
		if(position<0||position>getLength()) {
			System.out.println("invalid position");
		}else {
			LinkedListNode p=head;
			for(int i=0;i<position;i++) {
				p=p.next;
			}
			p.val=val;
			System.out.println("ok");
		}
	}
	
	//显示链表中的数据
	public void show() {
		LinkedListNode p=head.next;
		System.out.println("List:");
		while(p!=null) {
			System.out.printf("%d\t",p.val);
			p=p.next;
		}
		System.out.println();
	}
	
	//单链表反转
	public void reverse() {
		LinkedListNode p=head.next;
		LinkedListNode h=new LinkedListNode();
		while(p!=null) {
			head.next=p.next;
			p.next=h.next;
			h.next=p;
			p=head.next;
		}
		head=h;
		System.out.println("reverse");
	}
	
	//逆序打印单链表,用栈
	public void showReverse() {
		LinkedListNode p=head.next;
		Stack<Integer> s=new Stack(); 
		System.out.println("List:");
		while(p!=null) {
			s.push(p.val);
			p=p.next;
		}
		while(!s.isEmpty()) {
			System.out.printf("%d\t",s.pop());
		}
		System.out.println();
	}
	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值