java自己实现单链表的基本操作

package SingleLinkedList;

import java.util.Hashtable;

public class SingleLinkedListImplements {
	private Node head;
	/*
	 * 添加节点
	 */
	public void addNode(int i){
		Node newnode=new Node(i);
		Node currenode=head;
		if(head==null){
			head=newnode;
			head.next=null;
			return;
		}
		while(currenode.next!=null){
			currenode=currenode.next;
		}
		currenode.next=newnode;
	}
	
	/**
	 * 删除节点
	 */
	public boolean deleteNode(int index){
		if(index<1||index>length())
			return false;
		Node prenode=head;
		Node currnode=head;
		if(index==1){
			head=head.next;
			return true;
		}
		int i=2;
		while(currnode!=null){
			prenode=currnode;
			currnode=currnode.next;
			if(index!=i){
			i++;
			}else{
				prenode.next=currnode.next;
				return true;
			}
			
		}
		return true;
	}
	
	/**
	 * 列表排序默认升序
	 */
	public void orderList(){
		Node prenode=head;
		Node currnode;
		int temp=0;
		while(prenode!=null){
			currnode=prenode.next;
			while(currnode!=null){
				if(prenode.data>currnode.data){
					temp=prenode.data;
					prenode.data=currnode.data;
					currnode.data=temp;
				}
				currnode=currnode.next;
			}
			prenode=prenode.next;
		}
	}
	
	/**
	 * 列表长度
	 */
	public int length(){
		int length=0;
		Node currnode=head;
		if(currnode==null)
			return 0;
		while(currnode!=null){
			length++;
			currnode=currnode.next;
		}
		return length;
	}
	
	/**
	 * 列表遍历
	 */
	public void printf(){
		Node node=head;
		if(head==null)
			return;
		while(node!=null){
			System.out.print(node.data+" ");
			node=node.next;
		}
		System.out.println();
	}
	
	/**
	 * 去除重复元素方法一HashTable
	 */
	public void RemoveDuplicates(){
		Hashtable
   
   
    
     table=new Hashtable
    
    
     
     ();
		Node prenode=null;
		Node currnode=head;
		while(currnode!=null){
		if(table.containsKey(currnode.data)){
			prenode.next=currnode.next;
		}else{
			table.put(currnode.data, 1);
			prenode=currnode;
			prenode.next=currnode.next;
		}
		currnode=currnode.next;
		}
		
	}
	
	/**
	 * 去除重复元素方法二
	 */
	public void RemoveDuplicates2(){
		Node prenode=head;
		Node currnode;
		while(prenode.next!=null){
			currnode=prenode;
			while(currnode.next!=null){
				if(prenode.data==currnode.next.data){
					currnode.next=currnode.next.next;//必须改变指针
				}else{
					currnode=currnode.next;
				}
			}
			prenode=prenode.next;
		}
	}
	
	/**
	 * 返回头节点
	 * @return
	 */
	public 	Node findHead(){
		return head;
	}
	/**
	 * 找到列表倒数第K位置的元素
	 */
	public Node findElement(Node node,int k){
		Node p1=head;
		Node p2=head;
		for(int i=1;i
     
     
      
      =0){
			int d=length1-length2;
			while(d!=0){
				t1=t1.next;
				d--;
			}
		}else{
			int d=length2-length1;
			while(d!=0){
				t2=t2.next;
				d--;
			}
		}
		while(t1!=t2){
			t1=t1.next;
			t2=t2.next;
		}
		return t1;
	}
}
package SingleLinkedList;

public class Node {
	public Node next;
	public int data;
	public Node(int data){
		this.data=data;
	}
}
package SingleLinkedList;

public class SingleLinkedTest {
	public static void main(String[] args){
		SingleLinkedListImplements singlelinkedlist=new SingleLinkedListImplements();
		singlelinkedlist.addNode(8);
		singlelinkedlist.addNode(9);
		singlelinkedlist.addNode(4);
		singlelinkedlist.addNode(3);
		singlelinkedlist.addNode(4);
		singlelinkedlist.addNode(3);
		singlelinkedlist.addNode(12);
		singlelinkedlist.addNode(1);
//		System.out.println("singlelinkedlist.length:"+singlelinkedlist.length());
//		singlelinkedlist.printf();
//		singlelinkedlist.deleteNode(8);
//		System.out.println("singlelinkedlist.length:"+singlelinkedlist.length());
//		singlelinkedlist.printf();
//		singlelinkedlist.orderList();
//		singlelinkedlist.printf();
//		singlelinkedlist.RemoveDuplicates();
//		System.out.println("singlelinkedlist.length:"+singlelinkedlist.length());
//		singlelinkedlist.printf();
//		singlelinkedlist.RemoveDuplicates2();
//		singlelinkedlist.printf();
//		System.out.println(singlelinkedlist.findElement(singlelinkedlist.findHead(),3).data);
//		singlelinkedlist.ReverseLinkList(singlelinkedlist.findHead());
//		singlelinkedlist.printf();
//		singlelinkedlist.printReverseLinkList(singlelinkedlist.findHead());
//		System.out.println("find mid node is :"+singlelinkedlist.findmid(singlelinkedlist.findHead()).data);
//		System.out.println(singlelinkedlist.Isloop(singlelinkedlist.findHead()));
		singlelinkedlist.printf();
		System.out.println(singlelinkedlist.deleteNode(singlelinkedlist.findElement(singlelinkedlist.findHead(), 7)));
		singlelinkedlist.printf();
	}
}

     
     
    
    
   
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值