写算法第四天-单链表排序
思路:利用冒泡排序思想,不进行链表的指针互换,只是进行值的互换
建立一个简单链表
public class ListNode {
//数据
String data;
int vir;
//下一个节点
ListNode next;
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
public ListNode getNext() {
return next;
}
public int getVir() {
return vir;
}
public void setVir(int vir) {
this.vir = vir;
}
public void setNext(ListNode next) {
this.next = next;
}
}
/单链表排序/
/*单链表排序*/
public static ListNode sortListNode(ListNode head){
//利用冒泡排序思想,不进行链表的指针互换,只是进行值的互换
//如果链表的为空,或下一个为空,直接返回
if(head == null || head.next == null) {
return head;
}
//定一个中间变量节点为当前节点,一个记录结尾节点
ListNode cur=null,end=null;
//头节点成为当前节点
cur=head;
//如果当前节点的下一个不等于尾节点
while(cur.getNext()!=end){
//如果当前节点的下一个不等于尾节点
while (cur.getNext()!=end){
//如果当前节点的值大于下一个节点的值
if (cur.getVir()>cur.getNext().getVir()){
//利用中间变量把当前节点的值存储
int temp=cur.getVir();
//把当前节点的值设置为下一个节点的值
cur.setVir(cur.getNext().getVir());
//把下一个节点的值设置为当前节点的值
cur.getNext().setVir(temp);
}
//让下一个节点成为当前节点
cur=cur.getNext();
}
//遍历完第一遍时,当前节点已经是最后一个,也是值最大,下一轮就不用比较了
end=cur;
//让头节点再来一次
cur=head;
}
return head;
}
结果:
public static void main(String[] args) {
ListNode head=new ListNode();
head.setData("0");
head.setVir(0);
for(int i=1;i<4;i++){
ListNode next=new ListNode();
next.setData(""+i);
next.setVir(i);
//尾插法,找到最后一个添加
ListNode mid=head;
while(mid.getNext()!=null){
mid=mid.getNext();
}
mid.setNext(next);
}
//顺序遍历
System.out.println("顺序遍历");
ListNode mid=head.getNext();
System.out.print(head.getData());
while (mid!=null){
System.out.print("<--"+mid.getData());
mid=mid.getNext();
}
System.out.println("");
//反转
ListNode reversal = reversal(head);
//反转后遍历
System.out.println("反转后遍历");
mid=reversal.getNext();
System.out.print(reversal.getData());
while (mid!=null){
System.out.print("<--"+mid.getData());
mid=mid.getNext();
}
System.out.println("");
//排序好后遍历
System.out.println("把反转后的排序好后遍历");
ListNode node = sortListNode(reversal);
mid=node.getNext();
System.out.print(node.getVir());
while (mid!=null){
System.out.print("<--"+mid.getVir());
mid=mid.getNext();
}
}