单链表一些面试题的实现

在这里插入图片描述
望大家发现问题,可以与我讨论

public class L {

public static void main(String[] args) {
	num one =new num(1);
	num two=new num(2);
	num three=new num(3);
	num four=new num(1);
	num five=new num(2);
	num six=new num(3);
	num seve=new num(4);
	Linked link=new Linked();
	link.add(one);
	link.add(two);
	link.add(three);
	System.out.println(link.getLength());
	
	link.findLastIndex(3);
	System.out.println("-----------------");
	Linked link2=new Linked();
	link2.add(four);
	link2.add(five);
	link2.add(six);
	link2.add(seve);
	
	link=link.addSort(link2);
	link.show();
	System.out.println("-----------------");
	link.reverse();
	link.show();
	
}
	}
class num
{
//data域
int n;
//next域
num next;
//构造函数
public num() {
}
public num(int n) {
	this.n=n;
}
//重写toString方法
public String toString() {
	return n+"";
}
}

//创建单链表
class Linked{
//创建头节点,不放入任何数据
private num head=new num();

public num getHead() {
	return this.head;
}
//添加结点
public void add(num n) {
	num temp=head;
	while(true) {
		if(temp.next==null) {
			break;
		}
		temp=temp.next;
	}
	temp.next=n;
}
//获得链表的长度
public  int getLength() {
	if(head.next==null) {
		System.out.println("单链表为空");
		return 0;
	}
	num temp=head.next;
	int length=0;
	while(true) {
		if(temp==null) {
			break;
		}
		length++;
		temp=temp.next;
	}
	return length;
}

//查找到倒数第几个结点
public void findLastIndex(int lastindex) {
	if(head.next==null) {
		System.out.println("单链表为空");
		return;
	}
	int size=getLength();
	if(lastindex<=0||lastindex>size) {
		System.out.println("输入的数据无意义");
	}
	num temp=head.next;
	
	for(int i=0;i<size-lastindex;i++) {
		temp=temp.next;
	}
	
	System.out.println(temp);
}
//实现链表的逆序,使用头插法
public num reverse() {
	if(head.next==null) {
		System.out.println("单链表为空");
		return null;
	}
	num temp=head.next;
	num cur=null;
	num reversenum=new num();
	while(true) {
		if(temp==null) {
			break;
		}
		cur=temp.next;
		temp.next=reversenum.next;
		reversenum.next=temp;
		temp=cur;
	}
	head.next=reversenum.next;
	return head;
}
//实现链表的逆序输出
public void showreverse() {
	head=reverse();
	num temp=head.next;
	while(true) {
		if(temp==null) {
			break;
		}
		System.out.println(temp);
		temp=temp.next;
	}
	head=reverse();
		
}

public void show() {
	num temp=head.next;
	while(true) {
		if(temp==null) {
			break;
		}
		System.out.println(temp);
		temp=temp.next;
	}
}
//实现两个有序链表,组成一个有序链表
public Linked addSort(Linked List) {
	Linked reason=new Linked();
	num temp1=this.head.next;
	num temp2=List.head.next;
	while(true) {
		if(temp1==null||temp2==null) {
			break;
		}
		if(temp1.n<temp2.n) {
			num cur=temp1.next;
			temp1.next=null;
			reason.add(temp1);
			temp1=cur;
		}else {
			num cur=temp2.next;
			temp2.next=null;
			reason.add(temp2);
			temp2=cur;
		}
		}
	while(temp1!=null) {
		reason.add(temp1);
		temp1=temp1.next;
		}
	while(temp2!=null) {
		reason.add(temp2);
		temp2=temp2.next;
		}
		return reason;
}
}
发布了9 篇原创文章 · 获赞 1 · 访问量 305

猜你喜欢

转载自blog.csdn.net/ShangDiYeGuJi/article/details/104468613