【链表】反转/逆置 链表,以及升级版Node* RotateList(Node* list, size_t k)
来源:互联网 发布:网络设计与管理华软 编辑:程序博客网 时间:2024/06/10 03:13
问题一
问题描述:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。
考虑:1只有一个结点。2、链表为空
//思路:定义三个指针,改变链表结点的指向//考虑 1一个结点,没有及诶单Node *ReverseList(Node* pHead){ Node* ReverseHead = NULL; Node* pNode = pHead; Node* pPrev = NULL; while (pNode != NULL) { Node *pNext = pNode->_next; if (pNext == NULL) ReverseHead = pNode; pNode->_next = pPrev; pPrev = pNode; pNode = pNext; } return ReverseHead;}
问题二:升级版
链表翻转。给出一个链表和一个数k,比如链表1→2→3→4→5→6,k=2,翻转后2→1→4→3→6→5,若k=3,翻转后3→2→1→6→5→4,若k=4,翻转后4→3→2→1→5→6,用程序实现Node* RotateList(Node* list, size_t k). 提示:这个题是链表逆置的升级变型。
分析问题
思路:链表中长度为k的一段从链表中摘除,翻转之后在将其衔接回链表。
步骤:1、找到k长的链表
2、从原来链表上摘取下来
3、逆置新的链表
4、连接到原来的链表上
循环上面的四个步骤,直到链表的长度不够k。
Node* GetTail(Node *pHead){ assert(pHead); Node* pNode = pHead; while (pNode->_next != NULL) { pNode = pNode->_next; } return pNode;}Node* RotateList(Node* pHead, size_t k){ if (k <= 1) return pHead; Node *pNewList = NULL; Node *pLastNode = NULL;//记录上一段链表的末尾 Node *pNextNode = NULL;//k链表的下一个节点 Node *pNewHead = NULL; //新链表的头 Node *pNode = pHead; while (pNode) { //找出长度为k的一段链表 pNewHead = pNode; size_t pos = 1; while (pNode && pos < k) { pNode = pNode->_next; pos++; } if (pos == k && pNode != NULL) { //找到的长度k的一段链表,逆置这段链表 pNextNode = pNode->_next; pNode->_next = NULL; //断开新链表与原来的链表 if (NULL != pLastNode) pLastNode->_next = NULL; pNewHead = ReverseList(pNewHead); //将这段链表连接到原来的链表上 1和2 //1、将新链表的头 链到原来的链表 if (pLastNode == NULL) { pNewList = pNewHead; } else { pLastNode->_next = pNewHead; } //2、将新链表的尾 连接到原来的链表上 //找新链表的尾 pNode = GetTail(pNewHead); pNode->_next = pNextNode; pLastNode = pNode; pNode = pNextNode;//开始下一轮找k长链表 } else break; } return pNewList;}
阅读全文
0 0
- 【链表】反转/逆置 链表,以及升级版Node* RotateList(Node* list, size_t k)
- 【链表&删除倒数第K个节点】Remove Nth Node From End of List
- 升级node
- linux下升级npm以及node
- List node
- node升级&npm升级
- npm 升级,node 升级
- node.js开发:node升级
- Leetcode解题-链表(2.2.6)RotateList
- 升级node.js到最新稳定版
- [Node]升级到最新稳定版方法
- 升级node.js到最新稳定版
- node.js 版本升级
- node.js版本升级
- Node.js版本升级
- node.js 版本升级
- node.js升级
- node.js 版本升级
- 4.9扩展输出窗口
- 工作常用软件
- Java 集合系列01之 总体框架
- 精华【分布式、微服务、云架构、dubbo+zookeeper+springmvc+mybatis+shiro+redis】分布式大型互联网企业架构!
- 1012. 数字分类 (20)
- 【链表】反转/逆置 链表,以及升级版Node* RotateList(Node* list, size_t k)
- windows下Nginx流媒体服务搭建
- Gait Anlysis
- TCP/IP入门 --传输层
- 4.10扩展属性、 任务列表、 输出和选项 Windows
- 使用Slf4j集成Log4j2构建项目日志系统解决方案
- 判断元素是否在屏幕中
- 程序异常分类及处理
- Unity 自定义字体消除警告版~