链表翻转(升级版)【每日一题】
来源:互联网 发布:广电局禁止网络机顶盒 编辑:程序博客网 时间:2024/06/06 15:11
题目:链表翻转。给出一个链表和一个数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次。即在翻转前判断是否大于为第k个节点,如果是则停止翻转,将翻转成功的节点和翻转剩下的节点连接起来就是所得的结果。
代码如下:
typedef int Datatype;typedef unsigned int size_t;typedef struct Node{ Datatype _data; struct Node* _pNext;}Node,*PNode;size_t Lengh(PNode pHead){ size_t count = 0; PNode pNode = pHead; while(pNode != NULL) { count++; pNode = pNode->_pNext ; } return count;}Node* ReverseKList(PNode pHead,size_t k){ PNode pReverseHead = NULL; PNode pNode = pHead; PNode pPrev = NULL; size_t i=1; if(pNode || k==0 || k>Lengh(pHead)) return pNode; while(pNode != NULL) { PNode pNext = pNode->_pNext ; if(i<=k) { if(pNext == NULL) pReverseHead = pNode; pNode->_pNext = pPrev; pPrev = pNode; pNode = pNext; i++; } else { pReverseHead = pPrev; while(pPrev->_pNext != NULL) { pPrev = pPrev->_pNext ; } pPrev->_pNext = pNode; break; } } return pReverseHead;}
阅读全文
0 0
- 链表翻转(升级版)【每日一题】
- 【每日一题-11】求二叉树高度/销毁一棵二叉树与链表翻转
- 每日一题--翻转单词顺序||左旋转字符串
- 每日一题(一)
- 每日一题(4) - 反转链表
- 链表相交问题【每日一题】
- P1533数字翻转 升级版
- 输入数据有毒 洛谷 数字翻转(升级版)
- 每日一题(二)
- 每日一题(三)
- 每日一题(四)
- 每日一题(五)
- 每日一题(六)
- 每日一题(七)
- 每日一题(day1)
- 每日一题(day2)
- 每日一题(day3)
- 每日一题(day4)
- 【LCA】HDU2586[How far away?]题解
- linux初学者-文件的归档和传输
- LightOJ
- C++中的static关键字的总结
- 【面试必看】各种排序算法代码实现
- 链表翻转(升级版)【每日一题】
- C++继承的理解与四种默认构造函数探索
- nyoj-28 大数阶乘
- React 实践项目 (四)
- Spring+Dubbo+Zookeeper框架搭建--<一>Zookeeper安装
- CentOS 安装后没有桌面-yellowcong
- VueJs2.0建议学习路线
- Django学习中后台管理出现的问题
- Kubernetes安装与使用