繁体   English   中英

反转单链表?

[英]Reversing a singly linked list?

这是我为单链表提供的代码,但是我正在努力完成反向 function。 这是代码和我在反向 function 的尝试。 我不断收到 2 个错误,上面写着“未声明的变量:节点”和“不兼容的类型:节点无法转换为链接列表”。

class LinkedList
{
    Node head;
    Node current;
    Node previous;

    public Object Get()
    {
        return current != null ? current.GetData() : null;
    }

    public void Next()
    {
        if (current != null)
        {
            previous = current;
            current = current.next;
        }
    }

    public void Head()
    {
        previous = null;
        current = head;
    }

    public void Insert(Object data)
    {
        Node node = new Node(data);
        node.next = current;

        if (current == head)
            head = node;
        else
            previous.next = node;

        current = node;
    }

    public void Remove()
    {
        if (current == null)
            throw new RuntimeException("Invalid position to remove");

        if (current == head)
            head = current.next;
        else
            previous.next = current.next;

        current = current.next;
    }

    public void Print()
    {
        for (Head(); Get() != null; Next())
            System.out.println(Get());
    }

    public LinkedList Reverse()
    {
        Node previous = null;  
        Node current = node;  
        Node forward;  

        while (current != null) 
        {  
            forward = current.next;  
            current.next = previous;  
            previous = current;  
            current = forward;  
        }  
    return previous;  
    }  

}

还有 class Node: class Node { // 下一个节点的公共引用 public Node next;

    // Private data field
    Object data;

    Node(Object data)
    {
        this.data = data;
    }

    public Object GetData()
    {
        return data;
    }
}

这是主要的 function: class Test { public static void main(String args[]) { // 创建一个单链表 () Linked_list = new

        // adding node into singly linked list 
        linked_list.Insert(Integer.valueOf(10));
        linked_list.Next();
        linked_list.Insert(Integer.valueOf(11));
        linked_list.Next();
        linked_list.Insert(Integer.valueOf(12));
        
        // printing a singly linked 
        linked_list.Print();
        
        // reversing the singly linked list 
        linked_list.Reverse(); 
        
        // printing the singly linked list again 
        linked_list.Print(); 
    } 
}

这是简单的解决方案:

public class ListReverser {
    Node<Integer> reverse(Node head) {
        Node current = head;
        while(current.getNext() != null) {
            Node next =  current.getNext();
            current.setNext(next.getNext());
            next.setNext(head);
            head = next;
        }
        return head;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM