2016-11-08 143 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; 
}