首页 > 其他分享 >反转链表(递归和迭代两种实现)

反转链表(递归和迭代两种实现)

时间:2024-06-03 14:56:00浏览次数:22  
标签:Node pre head 迭代 递归 next 链表 print reverse1

 1 #define IO std::ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
 2 #define bug(x) cout<<#x<<" is "<<x<<endl;
 3 #include<bits/stdc++.h>
 4 using namespace std;
 5 typedef long long ll;
 6 struct Node{
 7     int x;
 8     Node*next;
 9     Node(int x1,Node *next1){
10         x=x1,next=next1;
11     }
12 };
13 void reverse(Node *&head){
14     if(!head||!head->next)return;
15     Node *p=head;
16     Node *cur=nullptr;
17     while(p){
18         Node *q=p->next;
19         p->next=cur;
20         cur=p;
21         p=q;
22     }
23     head=cur;
24 }
25 Node* reverse1(Node *&pre,Node *&p){
26     if(!p->next){
27         p->next=pre;
28         return p;
29     }
30     Node *q=p->next;
31     p->next=pre;
32     pre=p;
33     return reverse1(pre,q);
34 } 
35 void print(Node *head){
36     while(head){
37         cout<<head->x<<" ";
38         head=head->next;
39     }
40     cout<<endl;
41 }
42 int main(){
43     Node *head=new Node(1,nullptr);
44     Node *pre=head;
45     for(int i=2;i<=5;i++){
46         Node *p=new Node(i,nullptr);
47         pre->next=p;
48         pre=p;
49     }
50     print(head);
51     reverse(head);
52     print(head);
53     Node *p=nullptr;
54     head=reverse1(p,head);
55     print(head);
56     p=nullptr;
57     head=reverse1(p,head);
58     print(head);
59 }

 

   

标签:Node,pre,head,迭代,递归,next,链表,print,reverse1
From: https://www.cnblogs.com/ccsu-kid/p/18228894

相关文章

  • 链表-单链表实现
    关于链表要存储多个元素的时候,数组/列表是最为常用的数据结构,几乎每个编程语言都实现了数组或者列表.但这种结构的缺点是,通常数组大小是固定的,即便类似jsArray或者Python中的list,当我们从中间插入或者删除元素时成本很高.数组特点是:访问快(有索引),中......
  • 206. 反转链表
    给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例1:输入:head=[1,2,3,4,5]输出:[5,4,3,2,1]示例2:输入:head=[1,2]输出:[2,1]示例3:输入:head=[]输出:[] 提示:链表中节点的数目范围是 [0,5000]-5000<=Node.val<=5000 进阶:链表......
  • 数据结构-单链表操作及代码实现(C语言)
    (一)单链表与线性表支持随机访问的特点相比,单链表的特点是适合插入与删除。结构体定义typedefintElementType;//数据元素类型定义typedefstructLNode//单链表结构体定义{ElementTypedata;//数据域structLNode*next;//存储下一个结点的地址}LNode,*L......
  • 【C语言项目实战】使用单链表实现通讯录
                                                                  ......
  • Object 对象实现for of 迭代遍历
    实现代码Object.prototype[Symbol.iterator]=function(){letkeys=Object.keys(this);letindex=0;return{next:()=>{return{value:this[keys[index++]],done:index>=keys.lengt......
  • 02-2.3.1 单链表的定义
    ⚠️这两天实在过于忙碌,以至于没有学习的时间,今天闲下来,立刻恢复更新,有等待我最新文章的小伙伴实在抱歉!⚠️另外,有喜欢我笔记的小伙伴可以订阅我的《数据结构》专栏,该专栏收录在我的大专栏《cs-self-learning》中,也可以订阅,日后会有更多有用的技能、笔记全部收录在大专栏里......
  • 【数据结构】单链表-->详细讲解,后赋源码
    欢迎来到我的Blog,点击关注哦......
  • 141. 环形链表
    141.环形链表 简单 相关标签相关企业 给你一个链表的头节点 head ,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索......
  • C语言----递归函数,计算一个非负整数的数字之和
    intDigitSum(intn){if(n==0)//如果n为0,则停止递归,因为没有更多的数字可以添加。{return0;}else{returnn%10+DigitSum(n/10);}/*假设输入123,第一次递归,return3和DigitSum(12)DigitSum(12)......
  • 合并两个有序递增链表
    题目如下: 代码如下:1#include<stdio.h>2#include<stdlib.h>34typedefstructListNode{5intval;6structListNode*next;7}ListNode_t;89structListNode*Merge(structListNode*pHead1,structListNode*pHead2)10{......