博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
1074 Reversing Linked List
阅读量:6155 次
发布时间:2019-06-21

本文共 1925 字,大约阅读时间需要 6 分钟。

题意:

每k个元素反转链表,不足k个就不反转。如原链表为1→2→3→4→5→6,k=3,则反转后的链表为3→2→1→6→5→4;若k=4,则反转后的链表为4→3→2→1→5→6。

思路:

这题会比较烦,写代码前一定要现在纸上理清思路,写出关键代码,不然出了错再改来改去真的很浪费时间,要是考试的话估计心态就蹦了。本题是比较经典的“反转链表(指反转整条链表)”的升级版,但做法是一样的。我们可以把“反转”这一动作单独抽象成一个函数,然后遍历链表,每遍历k个结点(假设是pi...pj),就把pi...pj这个子链表进行反转,易错点在于每k个子链表之间该如何衔接而确保不会断链,具体看代码,我已经注释的很详细了。

注:本题是关于“链表”操作非常经典的题目,应当熟练掌握,因为这是非常非常基础的问题。另外,个人觉得有必要说一下的是,网上很多的解题报告,以及《算法笔记》里的题解,都不是真正的“反转”操作,虽然也能AC,但不利于真正掌握链表、指针的操作,有些投机取巧。要是面试写白板代码的时候写成那种样子,是要被鄙视的。

代码:

#include 
const int N=100000;struct Node{ int data; int curr,next;}LinkList[N];//反转操作,记录新链表的头结点和尾结点//传入时,tail==head,记得加“&”void reverseLinkList(int& head,int& tail){ //如果链表为空,或者只有一个结点,则直接返回 if(head==-1 || LinkList[head].next==-1) return; int pre=-1,p=head;//p为工作指针 tail=LinkList[head].curr; while(p!=-1){ int next=LinkList[p].next; if(next==-1) head=p;//如果next为空,则当前结点为最后一个结点,令其为新链表的头结点 LinkList[p].next=pre; pre=p; p=next; }}int main(){ //freopen("pat.txt","r",stdin); int n,k,head; scanf("%d%d%d",&head,&n,&k); int curr,data,next; for(int i=0;i

 

【第一次限时AC的时候是这么做的,但这不是纯正“翻转”操作】

#include 
#include
#include
using namespace std;const int N=100000;struct Node{ int data; int curr,next;}LinkList1[N],LinkList2[N];int main(){ //freopen("pat.txt","r",stdin); int n,k,head; scanf("%d%d%d",&head,&n,&k); int curr,data,next; for(int i=0;i
temp; while(p!=-1){ temp.push_back(LinkList1[p]); cnt++; if(cnt==k){ reverse(temp.begin(),temp.end()); if(newhead==-1){ newhead=temp[0].curr; pre=newhead; }else{ LinkList2[pre].next=temp[0].curr; pre=temp[0].curr; } int i=0; for(;i+1

 

转载于:https://www.cnblogs.com/kkmjy/p/9543276.html

你可能感兴趣的文章
Yii2单元测试初探
查看>>
五、字典
查看>>
前端js之JavaScript
查看>>
Log4J日志配置详解
查看>>
实验7 BindService模拟通信
查看>>
scanf
查看>>
Socket编程注意接收缓冲区大小
查看>>
SpringMVC初写(五)拦截器
查看>>
检测oracle数据库坏块的方法
查看>>
SQL server 安装教程
查看>>
Linux下ftp和ssh详解
查看>>
跨站脚本功攻击,xss,一个简单的例子让你知道什么是xss攻击
查看>>
js时间和时间戳之间如何转换(汇总)
查看>>
js插件---图片懒加载echo.js结合 Amaze UI ScrollSpy 使用
查看>>
java中string和int的相互转换
查看>>
P1666 前缀单词
查看>>
HTML.2文本
查看>>
Ubuntu unity安装Indicator-Multiload
查看>>
解决Eclipse中新建jsp文件ISO8859-1 编码问题
查看>>
7.对象创建型模式-总结
查看>>