目录
寻找解决方案的方法
示例
输出
上述代码的解释
结论
首页 后端开发 C++ 使用C++按给定大小将双向链表分组反转

使用C++按给定大小将双向链表分组反转

Sep 04, 2023 am 09:49 AM
c编程 双向链表 分组反转

使用C++按给定大小将双向链表分组反转

在这个问题中,我们得到一个指向链表头部的指针和一个整数 k。在大小为 k 的组中,我们需要反转链表。例如 -

Input : 1 <-> 2 <-> 3 <-> 4 <-> 5 (doubly linked list), k = 3
Output : 3 <-> 2 <-> 1 <-> 5 <-> 4
登录后复制

寻找解决方案的方法

在这个问题中,我们将制定一个递归算法来解决这个问题。在这种方法中,我们将使用递归并使用递归来解决问题。

示例

#include <iostream>
using namespace std;
struct Node {
   int data;
   Node *next, *prev;
};
// push function to push a node into the list
Node* push(Node* head, int data) {
   Node* new_node = new Node();
   new_node->data = data;
   new_node->next = NULL;
   Node* TMP = head;
   if (head == NULL) {
      new_node->prev = NULL;
      head = new_node;
      return head;
   }
   while (TMP->next != NULL) { // going to the last node
      TMP = TMP->next;
   }
   TMP->next = new_node;
   new_node->prev = TMP;
   return head; // return pointer to head
}
// function to print given list
void printDLL(Node* head) {
   while (head != NULL) {
   cout << head->data << " ";
   head = head->next;
}
cout << endl;
}
Node* revK(Node* head, int k) {
   if (!head)
      return NULL;
   head->prev = NULL;
   Node *TMP, *CURRENT = head, *newHead;
   int count = 0;
   while (CURRENT != NULL && count < k) { // while our count is less than k we simply reverse                                                 the nodes.
      newHead = CURRENT;
      TMP = CURRENT->prev;
      CURRENT->prev = CURRENT->next;
      CURRENT->next = TMP;
      CURRENT = CURRENT->prev;
      count++;
   }
   if (count >= k) {
      head->next = revK(CURRENT, k); // now when if the count is greater or equal
      //to k we connect first head to next head
   }
   return newHead;
}
int main() {
   Node* head;
   for (int i = 1; i <= 5; i++) {
      head = push(head, i);
   }
   cout << "Original List : ";
   printDLL(head);
   cout << "\nModified List : ";
   int k = 3;
   head = revK(head, k);
   printDLL(head);
}

登录后复制

输出

Original List : 1 2 3 4 5
Modified List : 3 2 1 5 4
登录后复制

上述代码的解释

在这种方法中,我们遍历列表并遍历直到计数小于 k。我们进行递归调用,将该值赋予 head -> next( 这里我们只是在遍历时反转列表,但是当达到 k 时,我们需要使 head 指向另一个列表的第 k 个元素,例如,如果我们的列表是 1 2 3 4 5,我们的 k 是 3,我们将中间元素反转为 3 2 1,但现在我们需要 1 指向 4,因为该元素也将被反转,所以这就是我们使用的原因递归调用并进行额外的 if 语句。)。

结论

在本文中,我们解决了使用 递归。我们还学习了这个问题的C++程序以及我们解决的完整方法。我们可以用其他语言比如C、java、python等语言来编写同样的程序。我们希望这篇文章对您有所帮助。

以上是使用C++按给定大小将双向链表分组反转的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
威尔R.E.P.O.有交叉游戏吗?
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

使用C++编写代码,找到第N个非平方数 使用C++编写代码,找到第N个非平方数 Aug 30, 2023 pm 10:41 PM

我们都知道不是任何数字的平方的数字,如2、3、5、7、8等。非平方数有N个,不可能知道每个数字。因此,在本文中,我们将解释有关无平方数或非平方数的所有内容,以及在C++中查找第N个非平方数的方法。第N个非平方数如果一个数是整数的平方,则该数被称为完全平方数。完全平方数的一些例子是-1issquareof14issquareof29issquareof316issquareof425issquareof5如果一个数不是任何整数的平方,则该数被称为非平方数。例如,前15个非平方数是-2,3,5,6,

在C编程中,找到一个圆的面积 在C编程中,找到一个圆的面积 Aug 25, 2023 pm 10:57 PM

圆是封闭图形。圆上的所有点到圆内一点的距离都相等。中心点称为圆心。点到圆心的距离称为半径。面积是封闭图形尺寸跨度的定量表示。圆的面积是圆的尺寸内包围的面积。计算圆面积的公式,Area=π*r*r为了计算面积,我们给出了圆的半径作为输入,我们将使用公式来计算面积,算法STEP1:Takeradiusasinputfromtheuserusingstdinput.STEP2:Calculatetheareaofcircleusing,  area=(

使用C++编写的数组右旋转的反转算法 使用C++编写的数组右旋转的反转算法 Sep 08, 2023 pm 08:17 PM

在本文中,我们将了解逆转算法,将给定的数组向右旋转k个元素,例如−Input:arr[]={4,6,2,6,43,7,3,7},k=4Output:{43,7,3,7,4,6,2,6}Explanation:Rotatingeachelementofarrayby4-elementtotherightgives{43,7,3,7,4,6,2,6}.Input:arr[]={8,5,8,2,1,4,9,3},k=3Output:{4,9,3,8,5,8,2,1}寻找解决方案的方

使用C++找到数组中唯一配对的数量 使用C++找到数组中唯一配对的数量 Sep 07, 2023 am 11:53 AM

我们需要适当的知识才能在C++的数组语法中创建几个唯一的对。在查找唯一对的数量时,我们计算给定数组中的所有唯一对,即可以形成所有可能的对,其中每个对应该是唯一的。例如-Input:array[]={5,5,9}Output:4Explanation:Thenumberofalluniquepairsare(5,5),(5,9),(9,5)and(9,9).Input:array[]={5,4,3,2,2}Output:16寻找解决方案的方法有两种方法可以解决这个问题,它们是−

使用C++编写代码,找到具有相同最小值和最大值的子数组的数量 使用C++编写代码,找到具有相同最小值和最大值的子数组的数量 Aug 25, 2023 pm 11:33 PM

在本文中,我们将使用C++解决寻找最大值和最小值相同的子数组数量的问题。以下是该问题的示例−Input:array={2,3,6,6,2,4,4,4}Output:12Explanation:{2},{3},{6},{6},{2},{4},{4},{4},{6,6},{4,4},{4,4}and{4,4,4}arethesubarrayswhichcanbeformedwithmaximumandminimumelementsame.Input:array={3,3,1,5,

使用C++编写,找到一个集合上的自反关系的数量 使用C++编写,找到一个集合上的自反关系的数量 Aug 26, 2023 pm 08:17 PM

在本文中,我们将解释在一个集合上找到反身关系的方法。在这个问题中,我们给出一个数字n,以及一个由n个自然数组成的集合,我们必须确定反身关系的数量。反身关系-如果对于集合A中的每个'a',(a,a)属于关系R,则称关系R是集合A上的反身关系。例如-Input:x=1Output:1Explanation:set={1},reflexiverelationsonA*A:{{1}}Input:x=2Output:4Explanation:set={1,2},reflexiverelationsonA*

使用C++按给定大小将双向链表分组反转 使用C++按给定大小将双向链表分组反转 Sep 04, 2023 am 09:49 AM

在这个问题中,我们得到一个指向链表头部的指针和一个整数k。在大小为k的组中,我们需要反转链表。例如-Input:1<->2<->3<->4<->5(doublylinkedlist),k=3Output:3<->2<->1<->5<->4寻找解决方案的方法在这个问题中,我们将制定一个递归算法来解决这个问题。在这种方法中,我们将使用递归并使用递归来解决问题。示例#include<iostream&

使用C++编写,找到前三个项为等差数列,后三个项为等比数列的四元组数量 使用C++编写,找到前三个项为等差数列,后三个项为等比数列的四元组数量 Aug 30, 2023 pm 02:09 PM

在本文中,我们将描述查找四元数的所有可能方法,其中前3项采用A.P.,后3项采用G.P.。首先,我们将解释算术级数(A.P.)和几何级数(G.P.)的基本定义。算术级数(A.P.)-它是一个数字序列,其中公差(d)相同或恒定,表示两个连续数字的差是恒定的。例如:1,3,5,7,9|d=2几何级数(G.P.)-这是一个数字序列,其中公共比率(r)相同,这意味着我们可以通过乘以前一个号码与固定号码。例如:3、6、12、24、....|r=2在这个问题中,我们需要确定N个整数的数组arr[]中有多少个

See all articles