一个LinkedList的Node head怎么可能是一个数组呢? (leetcode 定义的输入令人困惑)

问题描述 投票:0回答:2

我试图在 Leetcode 上解决一个问题,尽管它很愚蠢,但我不理解为了测试它而输入的内容,而且我在评论/讨论中也没有看到任何关于它的内容。

只是检查 LinkedList 是否是回文:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     public int val;
 *     public ListNode next;
 *     public ListNode(int val=0, ListNode next=null) {
 *         this.val = val;
 *         this.next = next;
 *     }
 * }
 */
public class Solution {
    public bool IsPalindrome(ListNode head) {
        
    }
}

令人困惑的部分是在用例和示例中,作为头部,它们使用整数数组,例如 [1,2,2,1]。显然,这是 LinkedList 本身,各个节点的值。我以为我只是从数组中的整数构建一个 LinkedList 并继续。但是,如您所见,作为输入传递的参数(显然?)是一个数组本身,这不适用于 ListNode 结构,它显然应该接受单个整数作为头节点的值。

我什至不情愿地检查了解决方案的开头,以了解他们到底我必须做什么,但这对我的输入一点帮助都没有..

抱歉,如果超出范围,以这种方式进行有点困难。

c# singly-linked-list
2个回答
0
投票

S.Shakeri 是对的。我只是补充一点,根据你分享的代码,任务主要是完成

IsPalindrome
功能,这对你来说不一定需要处理整数数组,而是你应该遍历链表并检查一些方法,它的节点是否按回文顺序排列。

要遍历列表,

ListNode
类的第一个答案和定义应该足够帮助。

为了确定列表是否是回文,也许你可以考虑如何在纸上以某种方式做到这一点,即一次你只能访问列表的一个和下一个元素。之后你只需要将它编码下来就可以成功了。

请提出您的问题,是否有不清楚的地方,或者您被卡住了。


我不打算用代码告诉你实际的解决方案,因为这是 Leetcode 的任务,但我试图向你展示方法,你可以自己管理它。


-1
投票

IsPalindrome 方法的输入看起来是一个ListNode 对象,代表一个单向链表。 ListNode类有两个属性:val,代表当前节点的值,next,代表列表中的下一个节点。

要从输入数组创建 ListNode 对象,您可以遍历数组并为每个元素创建一个新的 ListNode 对象。然后,您可以通过将每个节点的下一个属性设置为列表中的下一个节点来将节点链接在一起。

这是一个如何从输入数组创建 ListNode 对象的示例:

public bool IsPalindrome(ListNode head) {
ListNode current = null;
for (int i = head.Length - 1; i >= 0; i--) {
    current = new ListNode(head[i], current);
}
// ...

}

在这个例子中,我们以相反的顺序遍历输入数组,并为每个元素创建一个新的 ListNode 对象。我们将每个节点的下一个属性设置为列表中的前一个节点,以便节点以相反的顺序链接在一起。最后,我们返回头节点,即列表中的第一个节点。

© www.soinside.com 2019 - 2024. All rights reserved.