33,008
社区成员
发帖
与我相关
我的任务
分享
public class Node2
{
private int num;
private Node2 next;
private static int size=0;
//构造函数1-生成表头
public Node2()
{
num=0;
next=null;
}
//生一个值是x,指向node的结点
private Node2(int x,Node2 node)
{
this.num=x;
this.next=node;
}
//头部添加
public void addBefore(int x)
{
Node2 node=new Node2(x,this.next);
this.next=node;
size++;
}
public int get(int index)
{
if(index>size)
{
throw new IndexOutOfBoundsException("Node2.get():"+index);
}
Node2 temp=this.next;
for(int i=0;i<index;i++)
{
temp=temp.next;
}
return temp.num;
}
public int size()
{
return size;
}
//冒泡
public void sort()
{
for(int i=0;i<size;i++)
{
//记录在案3个结点,分别是当前结点b,前一个和后一个结点a c
//其实可以不用C,用b.next也可,只为更直观
Node2 a=this;
Node2 b=a.next;
Node2 c=b.next;
for(int j=0;j<size-i;j++)
{
//到时尾则停止
if(b==null||c==null)
{
continue;
}
if(b.num>c.num)
{
//b c交换
a.next=c;
b.next=c.next;
c.next=b;
//重新记录a c
a=c;
c=b.next;
}
//不要交换时abc同时后移
else
{
a=a.next;
b=b.next;
c=c.next;
}
}
}
}
public void addSort(int x)
{
Node2 newNode=new Node2(x,null);
//当前操作数为b ,前一个结点是a
Node2 a=this;
if(a.next==null)
{
a.next=newNode;
size++;
}
Node2 b=a.next;
for(int i=0;i<size;i++)
{
//插入
if(b.num>x)
{
a.next=newNode;
newNode.next=b;
size++;
return ;
}
//a b后移
a=a.next;
b=b.next;
}
}
public static void main(String args[])
{
Node2 n=new Node2();
n.addSort(8);
n.addSort(1);
n.addSort(5);
n.addSort(2);
//n.sort();
for(int i=0;i<n.size;i++)
{
System.out.println(n.get(i));
}
}
}