望大家发现问题,可以与我讨论
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;
}
}