链表倒置算法题的心得
来源:互联网 发布:农村淘宝视频 编辑:程序博客网 时间:2024/05/17 23:53
做题的时候碰到了需要倒置线性链表的问题,但是它并不是完全倒置,而是分段倒置。具体题目如下:
Reversing Linked List:
Given a constant K and a singly linked list L,
you are supposed to reverse the links of every K elements on L.
For example, given L being 1→2→3→4→5→6,
if K=3, then you must output 3→2→1→6→5→4;
if K=4, you must output 4→3→2→1→5→6.
可以看到在倒置中涉及了边界和末尾的问题。
其实说起结点倒置,我第一个就想到了堆栈,节能又简短的数据结构。
后来又一寻思,这其实不就是链表的多次头插法么。
然后又思索了一下,哦,原来堆栈的实现其实也就是头插法。
至于考虑末尾不倒置的问题,则可以完全用
for(int i=Length(L);i>0;i-K){for(int j=0;j<K;j++){..............}}
来忽略边界值问题
而插头之后的重复倒置问题,则可以用两个临时指针来指向头结点和尾结点。〇为head结点
〇 ->1 ->2 ->3 ->4 ->5 ->6 ->7
假设这个链表的倒置参数K=2,则内部for循环移入新节点步骤:
=====================================================
一:
〇 ->2->3->4->5->6->7
〇->1
二:
〇->3->4->5->6->7
〇->2->1
=====================================================
而外循环的步骤则只要将原本指向头结点的临时指针指向结点1,再重复内循环,以此类推。在外循环结束后,将旧head结点之后的结点连上新节点的尾结点。最后得出答案:
〇->NULL
〇->2->1->4->3->6->5->7
然后return 新节点。
又由于程序语言用的C语言,所以复习了一遍C语言中对于字符串的处理;
声明过的char数组变量若没有在声明时初始化,则必须用string.h文件中的
strcpy(target,source)函数来进行赋值。相当麻烦哟。
至于字符串数组,则声明起来更是复杂得很。
假设所有字符串最大长度为6,则需要以下步骤:
typedef char ch[7];//最后一位保存\0typedef ch* str;//设置别名int main(){ int count=xxxx;//决定字符串数组的个数。 str strings=(str)malloc(sizeof(str)*count);//分配内存 strcpy(strings[0],"hello world");//对数组成员赋值 return 0;}
- 链表倒置算法题的心得
- 链表的倒置
- 链表的倒置
- 链表的倒置
- 链表的倒置
- 链表的倒置
- 算法谜题87 倒置的玻璃杯
- C 链表的倒置
- 单循环链表的倒置
- 单向链表的倒置
- 一个字符串倒置的算法
- 利用栈的倒置算法
- 链表操作法则之逆向遍历与倒置算法
- 第7题 倒置一个链表
- 链表倒置
- 链表倒置
- 链表倒置
- 链表倒置
- 百度地图 android 开发
- UNITY中FMOD音效插件使用
- on('click')与.click()事件的区别
- redis系列(六)客户端和服务器
- HTTP之HEAD请求
- 链表倒置算法题的心得
- require.js 被植入b.js 百度联盟推广js植入. 真坑
- Firefox浏览器多账号登陆方法
- ubuntu中常用的命令
- html中offsetTop、clientTop、scrollTop 各属性介绍
- 数据结构-链表
- Android6.0 混淆
- mysql主从复制
- gdb看core常用命令