从尾到头打印链表 ,合并两个排序的链表、反转链表 :迭代法
创始人
2024-04-01 17:29:29
0

 

目录

 

合并两个排序的链表:

关于迭代法的理解: 

每一层函数功能:

迭代的两个问题:

往里走时:

出来时:

 从尾到头打印链表 返回数组;

每一层函数功能:

迭代的两个问题:

往里走时:

出来时:

反转链表 

每一层函数功能:

迭代的两个问题:

往里走时:

出来时:


合并两个排序的链表:

关于迭代法的理解: 

每一层函数功能:

两个结点比较,返回较小结点

迭代的两个问题:

往里走时

        下一步的递归区间:因为是从小到大排序,所以当p1<= p2时,下一步应该比较p1->next和p2;

出来时

        返回值是什么:最后出来时,最后一层肯定是直接返回的头节点,每一层也应该返回头结点,从小到达排序,因此当p1<= p2时,返回较小的头节点p1;

        怎么处理:因为是从小到大,当p1<= p2时,因此出来时的头链接是p1->next = 返回值;

/*
struct ListNode {int val;struct ListNode *next;ListNode(int x) :val(x), next(NULL) {}
};*/
class Solution {
public:ListNode* Merge(ListNode* pHead1, ListNode* pHead2) {//终止条件;if(!pHead1) return pHead2;if(!pHead2) return pHead1;////函数功能:两个结点比较,返回较小结点//开始迭代的两个问题://往里走时:下一步的递归区间:因为是从小到大排序,所以当p1<= p2时,下一步比较p1->next和p2;//出来时:返回值是什么,怎么处理;最后出来时,最后一层肯定是直接返回的头节点,因为是从小到大,因此出来时首先建立连接p1->p2;if(pHead1->val <= pHead2->val){pHead1->next = Merge(pHead1->next, pHead2);return pHead1;}else{pHead2->next = Merge(pHead1, pHead2->next);return pHead2;}}
};

 从尾到头打印链表 返回数组;

每一层函数功能:

先走到底,返回时将结点值放入容器;

迭代的两个问题:

往里走时

        终止条件:head = NULL;

出来时

        返回值是什么:使用& ,因此不需要返回值;

        怎么处理:将结点值依次放入vector容器中;

/**
*  struct ListNode {
*        int val;
*        struct ListNode *next;
*        ListNode(int x) :
*              val(x), next(NULL) {
*        }
*  };
*/
class Solution {public://这里使用&来传递,void reverseList(ListNode* head, vector& v) {if(head != NULL){reverseList(head->next, v);v.push_back(head->val);}}vector printListFromTailToHead(ListNode* head) {vector v;reverseList(head, v);return v;}
};

反转链表 

每一层函数功能:

先走到底,返回时将结点值放入容器;

迭代的两个问题:

往里走时

        终止条件:最后一个结点;即head.next = NULL;

出来时

        返回值是什么:最后一个结点,存着当头节点;

        怎么处理:反转指向,之后p指针会自动往左跳;

/*
struct ListNode {int val;struct ListNode *next;ListNode(int x) :val(x), next(NULL) {}
};*/
class Solution {public:ListNode* ReverseList(ListNode* pHead) {//终止条件;if (pHead == NULL || pHead->next == NULL)return pHead;//ListNode* ret = ReverseList(pHead->next);pHead->next->next = pHead;pHead->next = NULL;return ret;}
};

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...