【发布时间】:2023-03-09 10:53:01
【问题描述】:
给定一个单向链表,其中每个元素都包含一个数字和一个指向链表头部的指针。对第一个和最后一个数据求和并删除这些节点。然后将生成的链表的第一个和最后一个数据相加,并删除这两个节点。
继续这样做,直到列表变空。
我们必须在 O(1) 空间复杂度中找到从结果总和中获得的最大总和。
该列表是一个具有偶数节点的单链表。
我的想法:
- 一种方法是在每次迭代时将指针移至最后一个元素,删除节点,并保留一个 maxSum 变量。这可能不是一个有效的解决方案。
【问题讨论】:
-
这是一个单链表还是双链表?
-
如果节点数为奇数会怎样?
-
@user1984 单链表,节点数为偶数
-
一种方法是遍历链表一次并将后半部分
1->2->3->4反转为1->2; 3<-4(可以使用快速和慢速指针找到中间然后反转以下列表从中间)。无论如何我们都必须删除节点,所以修改列表应该没问题。一旦完成,初始化一个指向原始头部的指针,中间已经结束。现在可以对最大值进行所需的删除和求和。 -
如果不要求效率,你的建议可以接受。
标签: algorithm linked-list