当前位置: 首页 > 知识库问答 >
问题:

反向合并链表

容远
2023-03-14

问题:给定一个排序的链表

1->2->3->4->5->6->7

更改链接列表中的指针以使其

7->1->6->2->5->3->4

使用恒定空间。

我试图用以下算法来解决它:

>

  • 使用两个节点(快速节点和慢速节点)查找链接列表的中间节点
  • 从中间节点反转链接列表。将中间节点标记为y,将起始节点标记为x。

    1->2->3->7->6->5->4
    x        y
    

    如果y=中间节点,y!=x、 下一步,然后交换y和x。然后交换x和x。

    1->7->3->2->6->5->4
    x        y
    7->1->3->2->6->5->4
    x        y
    

    x前进两个节点,y前进一个节点。

    7->1->3->2->6->5->4
          x     y     
    

    现在如果(x!=y){swap x和y}

    7->1->6->2->3->5->4
          x     y
    

    x前进两个节点,y前进一个节点

    7->1->3->2->6->5->4
                x  y
    

    所以最后我们得到了

    7->1->6->2->5->3->4
    

    问题:

    有没有更简单的方法?

  • 共有2个答案

    丌官嘉勋
    2023-03-14

    你可以在链接列表问题17和18中找到两个复杂的解决方案。

    诸葛品
    2023-03-14

    这是一个简单的解决方案:

    1. 找到列表大小

    样本:

    1. 1-

     类似资料:
    • 我有下面的程序来反转单链表中的元素。我不能让它工作。我使用了简单的变量交换技术来交换节点,但当我打印时,它不会超出第一个节点。

    • 问题内容: 有人可以告诉我为什么我的代码有效吗?我想在Java中反转单个链接列表:这是方法(无法正常工作) 这是Node类: 在输入4-> 3-> 2-> 1上,我得到了输出4。我对其进行了调试,它正确设置了指针,但是我仍然不明白为什么它仅输出4。 问题答案: Node next = tmp.next; while(tmp != null){ 那么,当tmp == null时会发生什么呢? 不过,

    • 023. Merge k Sorted Lists [H] 问题 Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. Subscribe to see which companies asked this question 思路 这题明显就是Merge

    • 21. Merge Two Sorted Lists 问题 Merge two sorted linked lists and return it as a new list. 思路 这个题目很简单也有几个可以考虑的思路,一个是比较直接的方式,重新构造链表,一种是利用递归 思路1 :用新的链表 这里用了一个新的节点了保存结果的链表,这里为了方便链表的扩充,增加一个临时的节点变量(否则每次加入都要遍

    • 还缺少的是将最后一个节点的next赋值为NULL。 在任何世界里,像这样的东西会起作用吗?它给出了一个运行时/分段错误。

    • 我试图借助单链表编写合并排序,节点定义如下, 合并排序的工作方式如下: i、 将未排序的列表划分为n个子列表,每个子列表包含1个元素(1个元素的列表被视为已排序)。 二、。重复合并子列表以生成新排序的子列表,直到只剩下1个子列表。这将是排序列表。代码如下所示。 我像这样打入会电话, 结果是,所有负值似乎都消失了。这里有什么问题?