微软,Google面试题 (19) —— 反转单向链表
2010-08-24 12:55
316 查看
题目:输入一个链表的头结点,反转该链表,并返回反转后链表的头结点。链表结点定义如下:
解法一:起始节点为p1,令p2 = p1->next, p1->next = NULL。若p2为NULL,则返回p1;若p2不为NULL,进行如下循环:令p3 = p2->next。p2->next = p1;然后再令p1 = p2; p2 = p3;直到p2为NULL,退出循环。返回此时的p1,即为反转后链表的第一个节点。代码如下:
解法二:采用递归。思路和解法一一样,只不过是用递归的形式。
struct ListNode { int m_nKey; ListNode* m_pNext; };
解法一:起始节点为p1,令p2 = p1->next, p1->next = NULL。若p2为NULL,则返回p1;若p2不为NULL,进行如下循环:令p3 = p2->next。p2->next = p1;然后再令p1 = p2; p2 = p3;直到p2为NULL,退出循环。返回此时的p1,即为反转后链表的第一个节点。代码如下:
node* reverse(node* head) { assert(head != NULL); node *p1 = head, p2 = p1->next, p3; p1->next = NULL; while (p2 != NULL) { p3 = p2->next; p2->next = p1; p1 = p2; p2 = p3; } return p1; }
解法二:采用递归。思路和解法一一样,只不过是用递归的形式。
// 在递归调用之前,要判断head是否为NULL。结束之后要把原head的next置为NULL node* reverse(node* p1, node* p2) { if (p2 != NULL) { node *p3 = p2->next; p2->next = p1; return reverse(p2, p3); } return p1; }
相关文章推荐
- 微软,Google面试题 (7) —— 反转句子中单词的顺序
- 经典面试题(三)附答案 算法+数据结构+代码 微软Microsoft、谷歌Google、百度、腾讯
- 经典面试题(二)附答案 算法+数据结构+代码 微软Microsoft、谷歌Google、百度、腾讯
- 经典面试题(四)附答案 算法+数据结构+代码 微软Microsoft、谷歌Google、百度、腾讯
- 全新整理:微软、Google等公司的面试题及解答、第61-70题
- 微软、Google等面试题
- 微软,Google面试题 (16) —— O(logn)求Fibonacci数列
- 微软,Google面试题 (22) —— 跳台阶
- 微软,Google面试题 (29) —— 调整数组顺序使奇数位于偶数前面
- 经典面试题(二)附答案 算法+数据结构+代码 微软Microsoft、谷歌Google、百度、腾讯
- 你要向你8岁的侄子解释什么是数据库,请用三句话完成。 - Google, 谷歌,百度,baidu,阿里巴巴,alibaba,微软,华为,huawei面试题,
- 经典面试题(四)附答案 算法+数据结构+代码 微软Microsoft、谷歌Google、百度、腾讯
- 微软、google、雅虎、百度等各大著名公司的经典面试题!保证搞晕你!!
- 经典面试题(四)附答案 算法+数据结构+代码 微软Microsoft、谷歌Google、百度、腾讯
- 经典面试题(一)附答案 算法+数据结构+代码 微软Microsoft、谷歌Google、百度、腾讯
- 微软、google、雅虎、百度等各大著名公司的经典面试题!保证搞晕你!!
- 全新整理:微软、Google等公司的面试题及解答、第161-170题
- 微软,Google面试题 (17) —— 字符串转换成整数
- 微软,Google面试题 (31) —— 从尾到头输出链表
- 微软Microsoft、谷歌Google、百度、腾讯面试题(一)