簡體   English   中英

我如何按升序對鏈表進行排序

[英]how can i sort a linked list in ascending order

這就是我嘗試過的

這僅交換第一個鏈接...我如何解決此問題以對整個鏈接列表進行排序?

鏈表類

public class LinkedList {


private Link first;

public void LinkList() {

    first = null;

}public Link find(int key) {
    Link current = first;

    while (current.iData != key) {
        if (current.next == null) {
            return null;
        } else {
            current = current.next;

        }
    }
    return current;
}

public void insertFirst(int idata, String sdata) {
    Link nl1 = new Link(idata, sdata);

    nl1.next = first;
    first = nl1;
}

public Link deleteFirst() {

    Link temp = first;
    first = first.next;
    return temp;
}

public void displayList() {
    System.out.println("List : ");
    Link current = first;
    while (current != null) {
        current.displayLink();
        current = current.next;
    }
    System.out.println("");
}

public Link delete(int key) {
    Link current = first;
    Link previous = first;

    while (current.iData != key) {
        if (current.next == null) {
            return null;
        } else {
            previous = current;
            current = current.next;

        }

    }
    if (current == first) {
        first = first.next;
    } else {
        previous.next = current.next;

    }
    return current;
}

public void insertmidl(int key, int idata, String sdata) {

    Link nl = new Link(2, "name2");
    Link current = first;
    Link previous = first;

    while (current.iData != key) {
        if (current.next == null) 
        {
            System.out.println("");
        } else {
            previous = current;
            current = current.next;

        }

    }

    if (current == first) {

        nl.next = current.next;
        current.next = nl;

    }
    previous.next = nl;
    nl.next = current;

}

public void update(int key, int i, String n) {

    Link tobeupdated = find(key);

    tobeupdated.iData = i;
    tobeupdated.sData = n;


}
public void sort(){

            Link current = first;

   if(current.iData > current.next.iData) {

        Link temp = current.next;
        current.next = current.next.next;
        temp.next = current;
        first = temp;

    }
}

鏈接類

public class Link {
public int iData;
public String sData;
public Link next;

public Link(int id,String sd)
{
iData =id;
sData =sd;
next = null;
}
public void displayLink()
{
System.out.println(iData+""+sData); 
}
}

有誰可以幫助我嗎? .................................................. ...............................

本示例為您提供如何使用Comparator對LinkedList進行排序。 LinkedList包含用戶定義的對象。 通過使用Collections.sort()方法,可以對LinkedList進行排序。 您必須傳遞包含排序邏輯的Comparator對象。 該示例根據最高薪水對Empl對象進行排序。

import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;

public class MyLinkedListSort {

    public static void main(String a[]){

        LinkedList<Empl> list = new LinkedList<Empl>();
        list.add(new Empl("Ram",3000));
        list.add(new Empl("John",6000));
        list.add(new Empl("Crish",2000));
        list.add(new Empl("Tom",2400));
        Collections.sort(list,new MySalaryComp());
        System.out.println("Sorted list entries: ");
        for(Empl e:list){
            System.out.println(e);
        }
    }
}

class MySalaryComp implements Comparator<Empl>{

    @Override
    public int compare(Empl e1, Empl e2) {
        if(e1.getSalary() < e2.getSalary()){
            return 1;
        } else {
            return -1;
        }
    }
}

class Empl{

    private String name;
    private int salary;

    public Empl(String n, int s){
        this.name = n;
        this.salary = s;
    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getSalary() {
        return salary;
    }
    public void setSalary(int salary) {
        this.salary = salary;
    }
    public String toString(){
        return "Name: "+this.name+"-- Salary: "+this.salary;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM