附加两个单链表

4 java algorithm linked-list data-structures

我正在尝试使用Java实现LinkedList,只是为了测试我的技能.我遇到了一个问题,我必须附加两个我创建的链表.我在这里进入一个无限循环.有什么办法可以改进代码并实现所需的输出吗?

I/P:

列表A:4-> 3-> 2-> 1-> 0

列表B:4-> 3-> 2-> 1-> 0

O/P应为:4-> 3-> 2-> 1-> 0-> 4-> 3-> 2-> 1-> 0

class List {
    int val;
    List next;

    public List(int val) {
        this.val = val;
    }

    public String toString() {
        String output = "";
        List current = this;

        while (current != null) {
            output += current.val + "->";
            current = current.next;
        }
        return output + "NULL";
    }
}


class AppendLinkedLists {

    static List push(List list, int num) {
        List newList = new List(num);
        newList.next = list;
        return newList;
    }

    static List appendLists(List listA, List listB) {
        if (listA == null)
            return listB;
        else {
            List tempList = listA;
            while (tempList.next.next != null) {
                tempList = tempList.next;
            }
            tempList.next.next = listB;
            return listA;           
        }
    }

    public static void main(String[] args) {
        List listA = new List(0);
        listA = push(listA, 1);
        listA = push(listA, 2);
        listA = push(listA, 3);
        listA = push(listA, 4);

        List listB = listA;

        System.out.println("Input List A : " + listA.toString());
        System.out.println("Input List B : " + listB.toString());
        listA = appendLists(listA, listB);
        System.out.println("Combined Input Lists A and B : " + listA.toString());
    }
}
Run Code Online (Sandbox Code Playgroud)

Bri*_*new 5

您没有2个列表.你只有一个.

   List listB = listA;
Run Code Online (Sandbox Code Playgroud)

指定listB指向的引用listA.所以你要追求listA自我.

无论你有什么其他问题,我都会纠正这个问题(最简单的方法就是以listB与你创建方式类似的方式创建listA).

我的另一个评论(希望你不介意)是你已经创建了一个List对象,但它有很少/没有自己的行为.AppendLinkedLists我不会创建你的类,而是将功能放入List对象中,而不是:

listA = push(listA, 1);
Run Code Online (Sandbox Code Playgroud)

写:

listA.push(1);
Run Code Online (Sandbox Code Playgroud)

因此,行为被封装在 List 对象中.同样,你可以写:

listA.push(listB);
Run Code Online (Sandbox Code Playgroud)

通过使用重载.

  • 学习的乐趣所有部分.我们都经历过这一切.我们中的一些人在糟糕的一天仍然经历过它! (3认同)