Java 链表

package com.linkedlist;

public class LinkedList<E> {
	
	private class Node{
		public E e;
		public Node next;
		
		public Node(E e,Node next){
			this.e = e;
			this.next = next;
		}
		public Node(E e){
			this(e, null);
		}
		public Node(){
			this(null,null);
		}
		
		@Override
		public String toString() {
			return e.toString();
		}
	}
	
	private Node head;
	private int size;//链表的大小
	
	public LinkedList(){
		this.head = null;
		this.size = 0;
	}
	public int getSize(){
		return size;
	}
	public boolean isEmpty(){
		return size == 0;
	}
	
	
	public void addFirst(E e){
//		Node node = new Node(e);
//		node.next = head;
//		head = node;
		
		head = new Node(e,head);
		size ++;
	}
	
	public void add(int index,E e){
        
		if(index < 0 || index > size)
            throw new IllegalArgumentException("Add failed. Illegal index.");
        
		if(index == 0 )
		{
			addFirst(e);
		}else{
			Node prev = head;
			for(int i =0;i<index-1;i++){
				prev = prev.next;
			}
			prev.next = new Node(e,prev.next);
			size ++;
		}
	}
	
	public void addLast(E e){
		add(size, e);
	}

}
package com.linkedlist;

public class LinkedList<E> {
	
	private class Node{
		public E e;
		public Node next;
		
		public Node(E e,Node next){
			this.e = e;
			this.next = next;
		}
		public Node(E e){
			this(e, null);
		}
		public Node(){
			this(null,null);
		}
		
		@Override
		public String toString() {
			return e.toString();
		}
	}
	
	private Node dummyHead;//虚拟空节点
	private int size;//链表的大小
	
	public LinkedList(){
		this.dummyHead = new Node();//空节点
		this.size = 0;
	}
	public int getSize(){
		return size;
	}
	public boolean isEmpty(){
		return size == 0;
	}
	
	
	public void addFirst(E e){
//		Node node = new Node(e);
//		node.next = head;
//		head = node;
		add(0, e);
	}
	
	public void add(int index,E e){
        
		if(index < 0 || index > size)
            throw new IllegalArgumentException("Add failed. Illegal index.");
        
		Node prev = dummyHead;
		for(int i =0;i<index;i++){
			prev = prev.next;
		}
		prev.next = new Node(e,prev.next);
		size++;
		
	}
	
	public void addLast(E e){
		add(size, e);
	}
	
	public E get(int index){
        if(index < 0 || index >= size)
            throw new IllegalArgumentException("Get failed. Illegal index.");	
        
        Node cur = dummyHead.next;
        for (int i = 0; i < index; i++) 
			cur = cur.next;
        return cur.e;
	}
	
	public E getFirst(){
		return get(0);
	}
	
	public E getLast(){
		return get(size - 1);
	}
	
	/**
	 * 修改节点
	 * @param index
	 * @param e
	 */
	public void set(int index,E e){
		if(index < 0 || index >= size)
            throw new IllegalArgumentException("Get failed. Illegal index.");	
		
		Node cur = dummyHead.next;
		for (int i = 0; i < index; i++)
			cur = cur.next;
		cur.e = e;
	}
	
	public boolean contains(E e){
		Node cur = dummyHead.next;
		while (cur != null) {
			if(cur.e.equals(e)){
				return true;
			}
			cur = cur.next;
		}
		return false;
	}
	
	public E remove(int index){
        if(index < 0 || index >= size)
            throw new IllegalArgumentException("Remove failed. Index is illegal.");
        
        Node prev = dummyHead;
        for (int i = 0; i < index; i++) {
			prev = prev.next;
		}
        Node retNode = prev.next;
        prev.next = retNode.next;//顺序不可调换  否则会指向自身
        retNode.next = null;
        size --;
       
        return retNode.e;
	}
	
	
	public E removeFirst(){
		return remove(0);
	}
	public E removeLast(){
		return remove(size - 1); 
	}
	
	@Override
	public String toString() {
		StringBuilder res = new StringBuilder();
		for (Node cur = dummyHead.next;cur != null;cur = cur.next) {
			res.append(cur + "->");
		}
		res.append("NULL");
		return res.toString();
	}
	

}
package com.linkedlist;

public class Main {
	public static void main(String[] args) {
		  LinkedList<Integer> linkedList = new LinkedList<>();
	        for(int i = 0 ; i < 5 ; i ++){
	            linkedList.addFirst(i);
	            System.out.println(linkedList);
	        }

	        linkedList.add(2, 666);
	        System.out.println(linkedList);

	        linkedList.remove(2);
	        System.out.println(linkedList);
	        	
	        linkedList.set(2, 123);
	        System.out.println(linkedList);
	        
	        System.out.println(linkedList.contains(123));
	        
	        linkedList.removeFirst();
	        System.out.println(linkedList);

	        linkedList.removeLast();
	        System.out.println(linkedList);
	}
}

链表的增删改查的操作  如有问题尽请指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值