Java 将单链接列表连接到一个列表中

Java 将单链接列表连接到一个列表中,java,singly-linked-list,Java,Singly Linked List,包单链接列表 导入网络数据结构。*; //创建列表1 //创建列表2 //打印列表1和2 //将列表1和2连接到列表3中 //打印列表3 公共类GameEntrySinglelyLinkedList{ 公共静态SingleLinkedList串联(SingleLinkedListGame1、SingleLinkedListGame2){ //声明方法列表 单链接列表结果; 单链接列表温度; //试一试 试一试{ 结果=game1.clone(); temp=game2.clone(); /*调试

包单链接列表

导入网络数据结构。*;
//创建列表1
//创建列表2
//打印列表1和2
//将列表1和2连接到列表3中
//打印列表3
公共类GameEntrySinglelyLinkedList{
公共静态SingleLinkedList串联(SingleLinkedListGame1、SingleLinkedListGame2){
//声明方法列表
单链接列表结果;
单链接列表温度;
//试一试
试一试{
结果=game1.clone();
temp=game2.clone();
/*调试目的
System.out.printf(“\n\n(调试)测试结果:%s\n”,结果);
System.out.printf(“\n\n(调试)测试温度:%s\n”,温度);
*/
}
//捕获克隆异常
捕获(CloneNotSupportedException n){
返回null;
}
//当
而(!temp.isEmpty()){
result.addFirst(temp.removeFirst());
/*调试目的
System.out.printf(“\n\n(调试)测试结果:%s\n”,结果);
System.out.printf(“\n\n(调试)测试温度:%s\n”,温度);
*/
}
返回结果;
}
/* *********** *
*主要方法*
* *********** */
公共静态void main(字符串[]args){
//局部变量
SinglyLinkedList game1=新的SinglyLinkedList();
SinglyLinkedList game2=新的SinglyLinkedList();
SinglyLinkedList gameTotal=新的SinglyLinkedList();
//填充列表
游戏1.先添加(“CLG”);
游戏1.先添加(“C9”);
游戏2.添加第一(“TSM”);
游戏2.第一名(“不朽者”);
//打印列表
System.out.printf(“\n\n名称1:%s\n”,游戏1);
System.out.printf(“\n\n名称2:%s\n”,游戏2);
//调用连接方法,存储在gameTotal中
gameTotal=连接(game1,game2);
//从gameTotal打印游戏总数列表
System.out.printf(“\n\n所有游戏:%s\n”,gameTotal);
}
}
/*不知道为什么。addLast不起作用,但是。addFirst会起作用。
*它在最后的列表中也稍微打乱了顺序
*CLG后面有一个额外的“,”表示列表中的一个空白点
*最后。我也不知道如何摆脱它*/

我已经建立了两个链表,我需要用前两个链表连接起来来填充第三个链表。我被卡住了,因为我需要打印第三个列表,我和我的朋友们都不知道如何在这两个列表上使用连接函数来生成第三个列表并打印出来。

你可以通过遍历game2来做一些事情,比如: 基本上从game2的头部开始,然后将其附加到game1

您可以向列表中添加一个方法,如

package singlyLinkedList;

import net.datastructures.*;

// CREATE LIST 1
// CREATE LIST 2
// PRINT LISTS 1 & 2
// CONCATENATE LISTS 1 & 2 into LIST 3
// PRINT LIST 3
public class GameEntrySinglyLinkedList {

    public static SinglyLinkedList<String> concatenate (SinglyLinkedList<String>game1, SinglyLinkedList<String>game2) {
        // DECLARE METHOD LISTS
        SinglyLinkedList<String> result;
        SinglyLinkedList<String> temp;

        // TRY
        try {
            result = game1.clone();
            temp = game2.clone();
            /* DEBUGGING PURPOSES
            System.out.printf ("\n\n(DEBUG) Test Result: %s\n", result);
            System.out.printf ("\n\n(DEBUG) Test Temp: %s\n", temp);
            */
        }
        // CATCH CLONE EXCEPTION
        catch(CloneNotSupportedException n) {
            return null; 
        }
        // WHILE
        while(!temp.isEmpty()) {
            result.addFirst(temp.removeFirst());
            /* DEBUGGING PURPOSES
            System.out.printf ("\n\n(DEBUG) Test Result: %s\n", result);
            System.out.printf ("\n\n(DEBUG) Test Temp: %s\n", temp);
            */
        }

        return result;
    }

    /* *********** *
     * MAIN METHOD *
     * *********** */
    public static void main(String[] args) {
        // LOCAL VARIABLES
        SinglyLinkedList<String> game1 = new SinglyLinkedList<String> ();
        SinglyLinkedList<String> game2 = new SinglyLinkedList<String> ();
        SinglyLinkedList<String> gameTotal = new SinglyLinkedList<String> ();

        // POPULATE LISTS
        game1.addFirst("CLG");
        game1.addFirst("C9");

        game2.addFirst("TSM");
        game2.addFirst("Immortals");

        // PRINT LISTS
        System.out.printf ("\n\nGame 1: %s\n", game1);
        System.out.printf ("\n\nGame 2: %s\n", game2);

        // CALL CONCATENATE METHOD, STORE IN gameTotal
        gameTotal = concatenate(game1, game2);

        // PRINT TOTAL GAMES LIST FROM gameTotal
        System.out.printf("\n\nAll Games: %s\n", gameTotal);

    }

}

/* Can't figure out why .addLast won't work but .addFirst will. 
 * It screws up the order a little in the final list as well as
 * an extra ", " after CLG which shows an empty spot in the list
 * at the end. Don't know how to get rid of that either. */
并使用它

public SinglyLinkedListNode getHead()
{
   return head;
}
编辑:我看到您正在使用SinglyLinkedList.java


此方法将通过遍历来工作,因此您应该仅将其视为知道如何通过遍历来连接。

因为您正在使用
addFirst
添加所有项,并且根据您只想连接它们(而不是排序)的问题,我假设您要查找的结果是:

public void concatenate(SinglyLinkedList game1, SinglyLinkedList game2) 
{

            SinglyLinkedListNode current = game2.getHead();
            while (current != null) 
           {

                  game1.addLast( current );
                  current = current.next;
            }

}
因此,假设实施可以是:

List 1: C9 -> CLG        
List 2: Immortals -> TSM
Expected result: C9 -> CLG -> Immortals -> TSM
公共静态SingleLinkedList串联(SingleLinkedListGame1,SingleLinkedListGame2){
单链接列表结果;
单链接列表温度;
试一试{
result=game1.clone();//已将game1复制到result中
temp=game2.clone();//获取第二个列表的副本,我们将在连接过程中销毁它
}
catch(CloneNotSupportedException e){//只有在未实现时才能发生
返回null;
}
而(!temp.isEmpty()){
result.addLast(temp.removeFirst());
}
返回结果;
}

我收到一个错误,提示SinglyLinkedListNode无法解析为类型,并且SinglyLinkedList.head字段不可见。编辑:我缺少一些声明或导入吗?你可以为你的头部添加一个getter并使用它。我收回我所说的,你能为addFirst()方法显示你的代码吗?您应该能够在列表中的节点中有一个“next”字段。我不明白一个“字符串”怎么会有这样的功能。我不明白第一个代码公共字符串getHead(){return head;}会有什么帮助,因为程序似乎根本不知道head是什么。这就是我所有的代码……没有其他代码。编辑:它输出-游戏1:(C9,CLG)游戏2:(不朽,TSM)我需要为.clone()抛出一个异常,因为它是一个未处理的异常。编辑:我甚至可以在concatenate函数中重新创建相同的列表,但我知道这会非常愚蠢。只有在未实现clone方法的情况下才会发生异常。因此,您当然需要知道它是否由您使用的库实现(看起来是这样),但如果是,这个异常将永远不会发生。因此,我添加了一个非常原始的异常处理。我知道除了临时和结果之外,所有这些都没有得到解决。您在上面定义了它们吗?它给出的错误到底是什么?好的,上面的代码没有错误,让我现在试着让它运行,看看会发生什么。
public static SinglyLinkedList<String> concatenate (SinglyLinkedList<String>game1, SinglyLinkedList<String>game2) {
    SinglyLinkedList<String> result;
    SinglyLinkedList<String> temp;
    try {
        result = game1.clone(); // game1 copied into result
        temp = game2.clone(); // get copy of second list, which we will destroy in the process of concatenation
    }
    catch(CloneNotSupportedException e) { // can only happen if it was not implemented
        return null; 
    }
    while(!temp.isEmpty()) {
        result.addLast(temp.removeFirst());
    }

    return result;
}