public class Node {
//结点类
Node next;//指针域
int data;//数据域
Node(int data)
{
this.data=data;
this.next=null;
}
}
package javawork;
public class List {
//链表类
Node head;//头结点
List()
{
head=new Node(0);//头结点的数据域存储链表的长度
}
//在链表的最后添加结点
public void addNode(int data)
{
Node temp=head;
while(temp.next!=null)
temp=temp.next;
head.data++;//链表的长度加一
Node add=new Node(data);
temp.next=add;
}
//在链表的第index个位置之前添加结点
public boolean insertNode(int index,int data)
{
Node temp=head;
int length=0;
while(length<index-1 && temp!=null)
{
length++;
temp=temp.next;
}
if(length>index-1 || temp==null)
{
System.out.println("插入位置失败!");
return false;
}
head.data++;//链表长度加一
Node flag=new Node(data);
flag.next=temp.next;//插入结点
temp.next=flag;
return true;
}
//删除链表第index个位置的结点
public boolean deleteNode(int index)
{
Node temp=head;
int length=0;
while(length<index-1 && temp.next!=null)
{
length++;
temp=temp.next;
}
if(length>index-1 || temp.next==null)
{
System.out.println("删除失败!");
return false;
}
head.data--;
Node flag=temp.next;
System.out.println("删除的结点的值为"+flag.data);
temp.next=flag.next;
return true;
}
//打印链表
public void printList()
{
Node temp=head.next;
while(temp!=null)
{
System.out.print(temp.data+" ");
temp=temp.next;
}
System.out.println();
}
//获取链表的长度
public int lengthNode()
{
return head.data;
}
//给链表排序
public void sort()
{
Node p;//p存放下一个结点
int temp;
//这里利用冒泡排序法根据长度确定比较的轮数,比较的轮数比链表的长度少1
int flag=lengthNode()-1;
while(flag>=0)
{
p=head.next;//冒泡法的思想,从第一个结点值与后面结点的值开始比较
while(p.next!=null)//相邻两个结点的值依次比较,让较大的数较大的泡冒到后面去
{
if(p.data>p.next.data)
{
temp=p.data;
p.data=p.next.data;
p.next.data=temp;
}
p=p.next;
}
flag--;
}
}
}
package javawork;
public class NodeMain {
public static void main(String args[])
{
List link=new List();
int a[]= {33,56,21,9,100,101,78,1111,334,55};
for(int i=0;i<a.length;i++)
link.addNode(a[i]);//从链表后面开始插入
System.out.println("排序前:");
link.printList();//打印结果看一下有没有problem
link.sort();//排序
System.out.println("排序后:");
link.printList();
System.out.println("在第6个位置插入18");
link.insertNode(6, 18);
link.printList();
//插入后排序
link.sort();
link.printList();
System.out.println("删除第3个位置的结点!");
link.deleteNode(3);
link.printList();
//删除后排序,当然顺序不变
link.sort();
link.printList();
}
}