无限循环正在发生。怎么解决?

时间:2015-05-24 11:09:57

标签: java

import java.util.Scanner;

public class reverse {
    private Node head;
    private int listCount;

    public reverse() {
        head = new Node(null);
        listCount = 0;
    }

    public static void main(String args[]) {
        reverse obj = new reverse();

        Scanner sc = new Scanner(System.in);
        int n, i, x;
        System.out.println("How many no.s?");
        n = sc.nextInt();
        for (i = 1; i <= n; i++) {
            System.out.println("enter the no.");
            x = sc.nextInt();
            obj.add(x);
        }

        Node newhead = obj.method1(obj.head);
        obj.display(newhead);
    }

    public void add(Object data) {
        Node temp = new Node(data);
        Node current = head;

        while (current.getNext() != null) {
            current = current.getNext();
        }

        current.setNext(temp);
        listCount++;
    }


    public void display(Node newhead) {
        Node current = newhead;
        //System.out.println(current.getNext().getNext().getNext().getNext().getNext().getData());
        while (current != null) {
            System.out.print(current.getData() + " " +);
            current = current.getNext();
        }
    }

    public Node method1(Node head) {
        if (head == null) {
            return head;
        }

        Node first = head.getNext();
        Node second = first.getNext();

        first.setNext(head);
        head = null;

        if (second == null)
            return head;

        Node current = second;
        Node prev = first;

        while (current != null) {
            Node upcoming = current.getNext();
            current.setNext(prev);

            prev = current;
            current = upcoming;
            //System.out.println(prev.getData());
            //System.out.println(current.getData());
        }
        head = prev;
        return head;
    }

    private class Node {
        Node next;
        Object data;

        public Node(Object _data) {
            next = null;
            data = _data;
        }

        public Node(Object _data, Node _next) {
            next = _next;
            data = _data;
        }

        public Object getData() {
            return data;
        }

        public void setData(Object _data) {
            data = _data;
        }

        public Node getNext() {
            return next;
        }

        public void setNext(Node _next) {
            next = _next;
        }
    }
}

我的while声明无效。

newhead.getData()的初始值为5.我的代码中的注释部分也提供了null的值,这是正确的,但之后我的while循环中出现了一些错误。

我已经编写了用于撤消链接列表的代码。

display()方法是打印所有列表元素。

来自链表用户的输入是:

  

1 2 3 4 5

输出应为:

  

5 4 3 2 1

但我的输出是:

  

null 1 null 1 null 1 ............无限次发生。

1 个答案:

答案 0 :(得分:0)

填写数据时遇到问题。 所有点头都有相同的参考 尝试打印列表

    for(int i=;i;list.size();i++)
   System.out.print(list.getObjectAtIndex(i).getData);