2016-11-08 160 views
-1

我在整理一個鏈表 一個問題,當我使用此代碼編譯器進入無限循環,不要做我一直要求改變插入的代碼進行排序代碼如何對鏈表進行排序?

public void insert(int val) { 
    Node currentNode = head; 
    Node nextNode = head.next; 

    if (currentNode.num > val) { 
     Node tmpNode = head; 
     head = new Node(val); 
     head.next = tmpNode; 
     return; 
    } 

    if (nextNode != null && nextNode.num > val) { 
     currentNode.next = new Node(val); 
     currentNode.next.next = nextNode; 
     return; 
    } 

    while (nextNode != null && nextNode.num < val) { 
     currentNode = nextNode; 
     nextNode = nextNode.next; 
    } 

    currentNode.next = new Node(val); 
    currentNode.next.next = nextNode; 
} 

任何事情但這就是我帶它看起來很糟糕

這必須排序鏈表...我想!

public void sort() { 
    Node currentNode = head; 
    Node nextNode = head.next; 
    while (nextNode != null) { 
     if(currentNode.num>currentNode.next.num){ 
      Node tmpNode=currentNode; 
      currentNode.num=currentNode.next.num; 
      currentNode.next.num=tmpNode.num; 
     } 
    } 
} 
+1

你永遠不會在循環中設置'nextNode'。但即使你仍然不能排序清單。那隻會擺脫無限循環。 – Keiwan

+0

您所擁有的僅僅是一段代碼片段文章,其中不乏精力所及。如果你要求幫助理解,你需要提供一個更好的想法,你卡在哪裏。添加一些個人註釋(例如代碼註釋),表達您認爲代碼正在執行的內容,並且人們可以理解您思考中的任何錯誤並相應地提供幫助。 – Kache

+0

你是什麼意思*改變一個'insert'到排序方法*?這是兩個完全不同的東西。此外,您的插入功能已經保持列表排序。 (它不會檢查'head == null'是否只是作爲旁註)。 – Keiwan

回答

0

我假設你想鏈接列表進行排序,而插入自己。所以你不需要另一個函數來對它進行排序。你並沒有考慮最初的場景,頭部只會是空的,這只是錯誤

public void insert(int val) { 
Node currentNode = head; 
Node nextNode = head.next; 

if (head==null) { 
    head = new Node(val); 
    head.next = null; 
    return; 
} 

if (currentNode.num > val) { 
    Node tmpNode = head; 
    head = new Node(val); 
    head.next = tmpNode; 
    return; 
} 

if (nextNode != null && nextNode.num > val) { 
    currentNode.next = new Node(val); 
    currentNode.next.next = nextNode; 
    return; 
} 

while (nextNode != null && nextNode.num < val) { 
    currentNode = nextNode; 
    nextNode = nextNode.next; 
} 

currentNode.next = new Node(val); 
currentNode.next.next = nextNode; 
}