oddeeven链表代码不能在leetcode上工作



在leetcode上有一个叫做奇偶链表的问题。

它说:

给定一个单链表,将所有奇数节点分组在一起,后面跟着偶数节点。请注意,这里我们讨论的是节点数,而不是节点中的值。

你应该试着在适当的地方做这件事。程序应以O(1)空间复杂度和O(节点)时间复杂度运行

的例子:鉴于1 -> 2 -> 3 -> 4 -> 5 ->空,返回1 -> 2 -> 3 -> 5 -> 4 -> NULL。

这是我的Node类

public class Node 
{
private int value;
private Node next;
public Node(int Value) 
{
    this.value = Value;
    this.next = null;
}
public Node()
{
    this.value = -1;
    this.next = null;
}
public Node getNext() {
    return next;
}public void setNext(Node next) {
    this.next = next;
}public int getValue() {
    return value;
}public void setValue(int value) {
    this.value = value;
}
}

列表中有8个元素,值分别为1,2,3,4,5,6,7,8。这是我的输出-> 1 -> 3 -> 5 -> 7 -> 2 -> 4 -> 6 -> 8下面是我用链表法来解决OddEven任务。

public void oddEven()
{
    if(head.getNext() == null)
        return;
    Node lastOdd = head.getNext(); // gets the value of last odd even in list.
    Node current = lastOdd.getNext(); // Puts the reference on the first even index.
    Node before = lastOdd; // This node, will always be one index before current Node
    int travel = 1, loop;

    while(current != null)
    {
        loop = travel;
        // Prvo petlja putuje do sledeceg neparnog elementa
        while(loop-- > 0)
        {
            before = current;
            current = current.getNext();
        }
        if(current == null) // If it is end of the list, exit loop.
            break;
        before.setNext(current.getNext());
        current.setNext(lastOdd.getNext());
        lastOdd.setNext(current);
        lastOdd = current;
        current = before.getNext();
    }
}

它在我的电脑上工作得很好。但是当我把代码在leetcode我得到的错误,它不工作。但代码是一样的。下面是来自leetcode

的代码
 /**
* Definition for singly-linked list.
* public class ListNode {
*     int val;
*     ListNode next;
*     ListNode(int x) { val = x; }
* }
*/
  public class Solution {
   public ListNode oddEvenList(ListNode head) 
{
    if(head.next == null)
        return head;
    ListNode lastOdd = head.next; // gets the value of last odd even in list.
    ListNode current = lastOdd.next; // Puts the reference on the first even index
    ListNode before = lastOdd;
    int travel = 1, loop;

    while(current != null)
    {
        loop = travel;
        // Prvo petlja putuje do sledeceg neparnog elementa
        while(loop-- > 0)
        {
            before = current;
            current = current.next;
        }
        if(current == null)
            break;

        before.next = current.next;
        current.next = lastOdd.next;
        lastOdd.next = current;
        lastOdd = current;
        current = before.next;
    }
    return head;
}
}

这是我得到的错误

用于输入:[1,2,3,4,5,6,7,8]

你的答案:[1,2,4,6,8,3,5,7]

期望答案:[1,3,5,7,2,4,6,8]

但是方法是一样的,我错在哪里?

我去了这个网站,把你的代码放进去,让它更容易看到发生了什么,问题是这一行:

ListNode lastOdd = head.next; // gets the value of last odd even in list.

列表的第一个元素是1,但是您将最后一个奇数作为列表中的下一个,而不是列表的头。把它改成:

ListNode lastOdd = head

,并给出正确答案。

代码本身需要一些整理,内部while循环似乎没有真正的目的,不知道为什么在那里,或者它是之前尝试的剩余元素?

looptravel变量在做什么?它们在每次迭代中都是1,那么为什么是while(loop-- > 0)循环。对不起,我没有明白你想用那个循环达到的目的。

int travel = 1, loop;
    while(current != null)
    {
        loop = travel;
        // Prvo petlja putuje do sledeceg neparnog elementa
        while(loop-- > 0)
        {

解决方案:查找列表中最后一个节点。通过执行append,将所有偶数位置的节点移动到末尾。请确保在第一步中标记为最后的节点处停止,否则将进入无限循环。

相关内容

  • 没有找到相关文章

最新更新