知识点13:手写代码-倒转链表的c语言实现
来源:互联网 发布:网络教育 学籍 编辑:程序博客网 时间:2024/06/15 17:51
写在前面的废话:笔记本坏掉了,一插入8g的内存卡就开不了机,而不插入的话可以开机,但是又启动不了AS。不知道是内存卡的问题还是电脑接口的问题,想哭。这段时间要等同学带他的电脑过来帮我测试,所以关于Android的内容暂时是写不了的了~
然后,秋招火爆到来,这段时间除了一边继续学习嵌入式外,其他的莫过于准备秋招了。数据结构和算法是我的弱点中的弱点,所以需要加强,所以遇上一些常见的算法题的时候,还是会试着去写,然后贴出来的,算是积累体验吧。今天的是倒转链表的实现
倒转链表的思路
关于倒转链表的实现,一般的问题形式是从尾到头打印链表中的数据,这样的话其实会有两种情形,分别是打印数据而不改变链表结构,就比如你只需要用数组依次存储链表数据,再方向打印。或者递归遍历链表打印数据即可,这个比较简单,容易实现。而另外一种则是需要真正的反转链表每个节点的指向方向,彻底改变结构再依次打印,技术要求是比较大的。所以如果被问到这个问题时,需要先和面试官沟通好,用哪种形式。下面是第二种形式的思路:
递归思想。循环遍历链表,分别用两个指针p和q记录两个相邻的节点,如果q处于尾节点的时候,则使其指向前面的q,并将q指针的next指针设为NULL。然后递归上面操作,直到链表头指针的指向为NULL的时候,从新设置链表的头指针指向尾节点。从而完成反转。出现的一个问题是不知道如何在递归中预先存储尾节点。解决思路是首先通过方法得到链表的尾节点,作为倒转方法的参数传递过去。实现如下:
倒转链表的实现
/*获得链表的尾节点地址*/Node *get_tail_node(Linked *linked){ Node *p=linked->head; while(p->next!=NULL){ p = p->next; } return p;};/*倒转链表方法 linked:需要倒转的指针 head:存储的尾节点地址,由get_tail_node()方法传入*/void reverse(Linked *linked,Node *head){ //当头指针的指向为NULL时,代表链表倒转成功 if(linked->head->next==NULL){ linked->head = head; return; } //p,q表示相邻的两个链表节点 Node *p=linked->head; Node *q=p->next; //q跳转到尾节点,p为尾节点的前驱 while(q->next!=NULL){ p=p->next; q=p->next; } //倒转链表指向 q->next=p; p->next=NULL; //递归以上操作 reverse(linked,head); }
阅读全文
0 0
- 知识点13:手写代码-倒转链表的c语言实现
- 江苏计算机等级考试二级c语言知识点(手写版)
- C语言二叉树知识点讲解与实现代码
- 简单易懂的C语言实现双向链表代码
- C语言的知识点
- c语言的知识点
- 双向链表代码实现-C语言
- 链表倒转(原空间倒转,前插法倒转)
- 手写代码实现EventBus
- 手写代码实现EventBus
- 手写实现HashMap代码
- 栈的C语言实现及相关知识点总结
- 面试算法题:链表的倒转
- 单链表相关操作之C语言实现:插入,删除,倒转,复制,查找。。。
- 链表就地倒转
- C语言的一些知识点
- C语言最重要的知识点
- C语言最重要的知识点
- Insight spring-session 配置
- HDU1004 ZOJ2104 Let the Balloon Rise【MAP】
- 文章标题
- #COCI#word(乱搞)
- C# 中的接口和密封类
- 知识点13:手写代码-倒转链表的c语言实现
- ubuntu 16.04下安装 mysql-connector-c-6.1.11-linux-glibc2.12-x86_64.tar.gz
- 博客那些事
- 喷水装置(二)
- OpenCV3.1.0+VS2013开发环境配置
- 随机数
- ViewPager基本用法
- 深入了解类加载器
- RMQ算法(维护区间极大极小值)