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();
}
}
java自己实现单链表的基本操作
最新推荐文章于 2023-03-20 22:43:41 发布