将链接列表分成两部分,然后返回第二部分

用户

这是一个我做错了的编程问题,下面给出了部分代码:

public class SingleLinkedList<E> {
   private Node<E> head;
   private int size = 0;

   private static class Node<E> {
     private E data;
     private Node<E> next;

     /** Creates a new node with a null next field
         @param dataItem  The data stored
     */
     private Node(E data) {
       data = dataItem;
       next = null;
     }

    /** Creates a new node that references another node
         @param dataItem  The data stored
         @param nodeRef  The node referenced by new node
     */
     private Node(E dataItem, Node<E> nodeRef) {
       data = dataItem;
       next = nodeRef;
     }
  }

}

我的任务是创建一个方法,将链接列表分为两半,将元素的前一半留在原始列表中,然后返回一个包含列表后半部分的新SingleLinkedList。如果元素的数量为奇数,则多余的元素应该放在前半部分,我做不到,然后我的老师给出了如下答案:

SingleLinkedList<E> newlist = new SingleLinkedList<E>();
 newlist.head =  temp.next; 
temp.next= null; 
return newlist

但是,我什至没有得到答案,我是一个初学者,如果有人可以解释这个问题,我将不胜感激。

pbajpai

您的老师提供的代码不完整。无论如何,我可以给您两种方法来找到下半部分的指针:

  1. 如果要让指针引用同一列表的后半部分。

    private static Node getSecondHalfInSameList(Node head) {
        Node fastRunner = head, slowRunner = head;
        while(fastRunner != null && fastRunner.next != null) {
            slowRunner = slowRunner.next;
            fastRunner = fastRunner.next.next;
        }
        return slowRunner;
    }
    
  2. 如果要创建一个包含下半部分所有节点的新列表,则可以执行以下操作:首先找到中间节点,然后通过创建从中间节点迭代到下一个节点的新节点,从下半部分创建一个新列表。列表的末尾。

    private static Node getSecondHalfByCreatingNewNodes(Node head) {
        Node mid = getMiddleNode(head);
        Node newHead = new Node(mid.data);
        mid = mid.next;
        Node tail = newHead, temp;
        while(mid != null) {
            temp = new Node(mid.data);
            tail.next = temp;
            tail = temp;
        }
        return newHead;
    }
    
    private static Node getMiddleNode(Node head) {
        Node fastRunner = head, slowRunner = head;
        while(fastRunner != null && fastRunner.next != null) {
            slowRunner = slowRunner.next;
            fastRunner = fastRunner.next.next;
        }
        return slowRunner;
    }
    

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将字符串分为两部分:第一部分是标题,第二部分是使用php的章节

XSLT将XML的两部分之间的数据有条件地合并到第二部分中

我的sql语句有两部分附带“全部联合”。我希望第二部分仅在某些条件为真时执行

如何仅将字符串的第二部分存储在列表中?

Grep仅占空间的第二部分

bash命令第二部分失败

获取输出的第二部分,以两个空格分隔

将文件分成两部分

如何根据百分比将列表分成两部分?

Delphi 7-使用DEC加密,然后使用PHP OpenSSL解密(第二部分)

Pyparsing:将支票分成 2 个单独的部分时出现问题,如果第一部分的检查失败,则应继续检查第二部分

将整数转换为字符串,在小数点处拆分,然后在数组的第二部分中包含小数点?

Universe字典ITem多部分密钥,第二部分是多值

将二阶巴特沃斯转换为一阶 - 第二部分 -

将列表分成两部分-一个与第二个元素对应,另一个与所有其余元素对应

如何将文件分成两部分然后只搜索后半部分?

第二部分:编写两个函数,以反转vect <int>中元素的顺序

如果第二部分不起作用,则与的密码查询不会返回任何内容

使用C将文本文件的一半传递到链接列表的一个节点,将第二部分传递给另一个节点

由于列表范围中的第二部分,如何提取元组的第一部分

在侦听器中创建(某个类的)对象(第二部分)

拆分字符串列并在Python中提取第二部分

在事务第二部分中的Save(List <S>)与save(Entity)

在 matplotlib 中更改条形图第二部分的值

如何从C#中的字符串获取第二部分

如何在R中解释自动有义结果的第二部分?

如何用冒号突出显示搜索字符串的第二部分?

Unix命令在匹配模式后打印数据的第二部分

正则表达式:获取“路径”的倒数第二部分