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

在给定大小的组中反转链接列表

党权
2023-03-14

我正在解决在给定大小的组中反转链表的问题,我使用的算法如下:

1) 反转大小k的第一个子列表。反转时,我跟踪下一个节点和上一个节点。将指向下一个节点的指针设为next,将指向前一个节点的指针设为prev

2)head=反向(下一个,k)-递归调用列表的其余部分

3) 返回prev,它是反向列表的新标题

我的代码示例是:

struct node *reverse(struct node *start,int k)
{
    struct node *prev,*ptr,*next;
    prev=NULL;
    ptr=start;
    int count=0;
    while(count<k && ptr!=NULL)
    {
        next=ptr->link;
        ptr->link=prev;
        prev=ptr;
        ptr=next;
        count++;
    }

    if(next!=NULL)//recursive call
    start=reverse(next,k);

    return prev;
}

但我的输出只是颠倒了列表的前半部分!

例如:如果我的列表是:98 74 94 857 8 7

    My output is : 94 74 98(The rest is not being displayed)

我哪里错了?。。这个方法正确吗?

共有2个答案

胥玮
2023-03-14
if(next!=NULL)//recursive call
 start->next=reverse(next,k);

return prev;

这将在接下来为(k 1)个节点存储位置时起作用。当我们开始-

闾丘晨
2023-03-14

当您进行递归调用时:

if(next!=NULL)//recursive call
  start=reverse(next,k);

return prev;

您将递归调用的结果保存在“开始”中,以后将不再引用该结果。当控件从函数传递出去时,指针过期,递归调用的结果(即,第一个元素以外的任何元素)丢失。返回之前,必须将这些结果附加到反向子列表中。

 类似资料:
  • 本文向大家介绍Java程序以给定大小的组反转数组,包括了Java程序以给定大小的组反转数组的使用技巧和注意事项,需要的朋友参考一下 通过反转所需大小的子数组,可以按给定大小的组反转数组。一个例子如下。 演示此过程的程序如下。 示例 输出结果 现在让我们了解上面的程序。 首先打印原始数组。然后,使用for循环将给定大小(即4)的组反转为数组。演示此操作的代码段如下所示。 然后显示修改后的数组。演示此

  • 问题内容: 我正在用嘲笑验证方法已被调用。方法: 由于传递哪个列表都没有关系,因此我验证了该方法的调用方式如下: 但是,的大小很重要。因此,哪一个都没有关系,但是列表必须具有X个元素。 那有可能吗? 问题答案: 一种方法是使用Captor 有关说明文件,请参见http://docs.mockito.googlecode.com/hg/org/mockito/Mockito.html#15。 您还可

  • 我正在尝试反转一个链表,我为此编写了代码。但是,当我在反转后打印列表时,输出有点不完整。 产量:120 110 100

  • 我刚反应过来。Im正在尝试将包含链接的数组转换成将在网站中按顺序显示链接的东西。 类似这样的事情: 在服务器中显示的内容如下所示: 我试着做我找到的下面的代码,但是它失败了:

  • 我正在研究一个名为“回文链表”的LeetCode问题,其中给出了一个单链表,确定它是否是回文。例如,如果输入为1- 我通过使用额外的空间(将列表转换为ArrayList)来解决这个问题,现在我尝试用另一种方法来解决它,反转列表的第二部分,然后比较这两部分。虽然我可能没有以最好的方式实现这个想法,但我希望代码要么工作,要么输出错误的答案(然后我可以改进代码)。然而,一个奇怪的NullPointerE

  • 我目前无法获得双链接列表的反向函数来正确处理作业,我已经阅读了其他线程并在谷歌上搜索,但通常不同的是,我的问题以常量传递,它返回一个“dlist”。教授提供了一个“代码测试仪”,它说我的代码在执行“反向(反向(dlist c))”时,并不等于它本身就是“c”。[反转两次并不等于它本身]。 dlist类是: 这是反向函数: 每个数据列表节点都有一个指向前一个节点的指针和一个指向下一个节点的指针。dl