程序2——链表反转
来源:互联网 发布:郑淳元秋意浓 知乎 编辑:程序博客网 时间:2024/05/16 11:23
将一个链表反转。如1->2->3->4->5->NULL,反转后变成5->4->3->2->1->NULL
struct list
{
int data;
struct list *next;
};
list* converseList(list *head){ list newHead = NULL; //记录反转后的头结点 list pre = NULL; //记录前驱结点 list p = head; //当前工作结点 list pNext = NULL; //当前工作结点的下一个结点 while(p) { pNext = p->next; if(pNext == NULL) newHead = p; p->next = pre; pre = p; p = pNext; } return newHead;}
面试过程中,如果你顺利写出上面的代码,面试官会加大难度,让你写一个该程序的变式版本。如:
该题可以改成反转该链表的前K个结点。
如原链表为1->2->3->4->5->NULL,反转前3个链表,则结果为3->2->1->4->5->NULL
list* kConverseList(list* head, int k){ if(head == NULL) { printf("list is NULL\n"); return NULL; } int i = 1; list* p = head; //找到第k+1个结点 while(i <= k && p) { p = p->next; i++; } //如果链表长度小于k,则返回NULL if(i < k && p == NULL) { printf("length of list is less than k\n"); return NULL; } //反转前k个链表 list* end = p; p = head; list* pre = end; list* newHead = NULL; list* pNext = NULL; while(p != end) { pNext = p->next; if(pNext == end) { newHead = p; } p->next = pre; pre = p; p = pNext; } return newHead;}
这个题目还可以变形为(这个好像是携程网2015校园招聘的笔试题):
原链表为1->2->3->4->5->NULL,k=3,输出结果为3->2->1->5->4->NULL
list* kConverseListV2(list* head, int k){ if(head == NULL) { printf("list is NULL\n"); return NULL; } int i = 1; list* p = head; while(i <= k && p) { p = p->next; i++; } if(i < k && p == NULL) { printf("length of list is less than k\n"); return NULL; } list* end = p; //这个用于记录第k+1个结点,因为第k个结点的next结点就是此结点 list* converseTail = converseList(p); //现将后面的结点反转,记录反转后的“头”结点 p = head; list* pre = converseTail; // list* newHead = NULL; list* pNext = NULL; while(p != end) { pNext = p->next; if(pNext == end) { newHead = p; } p->next = pre; pre = p; p = pNext; } return newHead;}待续。。。。。。。。
0 0
- 程序2——链表反转
- 链表反转程序
- C/C++面试程序题(一)——字符串反转、链表反转的递归、非递归实现
- Microsoft100——003.链表反转
- 剑指offer——反转链表
- 《剑指offer》——反转链表
- 《剑指offer》——反转链表
- 反转链表——递归实现
- 链表——反转链表
- 剑指offer——反转链表
- 剑指offer——反转链表
- 剑指offer——反转链表
- 剑指offer——反转链表
- 剑指offer——反转链表
- 剑指offer——反转链表
- 剑指Offer——反转链表
- 剑指offer——反转链表
- 剑指offer—反转链表
- 802.11b协议的一些介绍和说明
- linux 库文件 生成与使用
- 自己做的一个下拉框控件(二级关联)
- Java 程序只运行一个进程--思路
- 视图之UITabBarController结构详解(侧重于文档分析)
- 程序2——链表反转
- INSERT
- Android 4.1 Surface系统变化说明
- 母函数模板
- 第十周项目一:getcher函数
- loadrunner 测试下载文件的测试脚本
- 用Xmanager + SecureCRT 在Linux 下安装oracle 10g
- Faac 编码实时pcm流到aac流 并用mp4v2打包成mp4文件
- 汉诺塔问题递归算法分析