(C++)剑指offer-15:反转链表(代码的鲁棒性)
2018-02-13 13:32
633 查看
剑指offer-15:反转链表
目录
剑指offer-15反转链表目录
1题目描述
2题目解析
3题目答案
1题目描述
输入一个链表,反转链表后,输出链表的所有元素。2题目解析
每次循环的情况写出来,假设初始链表是 0 -> 1 -> 2 -> 3 -> 4// 0 -> 1 -> 2 -> 3 -> 4 oldHead指向0, newHead指向0,toBeReversed指向1
// 1 -> 0 -> 2 -> 3 -> 4 oldHead指向0, newHead指向1,toBeReversed指向2
// 2 -> 1 -> 0 -> 3 -> 4 oldHead指向0, newHead指向2,toBeReversed指向3
// 3 -> 2 -> 1 -> 0 -> 4 oldHead指向0, newHead指向3,toBeReversed指向4
// 4 -> 3 -> 2 -> 1 -> 0 oldHead指向0, newHead指向4,toBeReversed指向null
3题目答案
从原链表的头部一个一个取节点并插入到新链表的头部原01234,
取1放在头部,10234
取2放在头部,21034
取3放在头部,32104
取4放在头部,43210
/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* ReverseList(ListNode* pHead) { if (pHead == NULL) return NULL; //代码的鲁棒性 ListNode* head = pHead; pHead = pHead->next; head->next = NULL; //假设原链表为: 0->1->2->3->4,pHead指向0 //上面三行之后:0->NULL 1->2->3->4, head指向0,pHead指向1 //pHead不断向右取,直到pHead=NULL,终止循环 while (pHead) { ListNode* next = pHead->next; //第一次进入循环时,0->NULL 1->2->3->4,head指向0,phead指向1,next指向2 pHead->next = head;//(1的next为0,即) head = pHead; //head指向了1 pHead = next; //pHead指向了2 //第一次进入循环时, 1->0->2->3->4 //其中head始终指向新链表的头部,pHead始终指向(要拿出来放在新链表头部)的位置 } return head; } };
相关文章推荐
- 【剑指offer】3.4代码的鲁棒性——面试题15:链表中倒数第k个结点
- 剑指offer 16题 【代码的鲁棒性】反转链表
- 剑指offer:(15)代码的鲁棒性:链表中倒数第k个结点
- (C++)剑指offer-14:链表中倒数第k个结点(代码的鲁棒性)
- 【剑指offer】3.4代码的鲁棒性——面试题16:反转链表
- 剑指offer:(16)代码的鲁棒性:反转链表
- (C++)剑指offer-16:合并两个排序的链表(代码的鲁棒性)
- 剑指offer_15_反转链表
- (C++)剑指offer-17:树的子结构(代码的鲁棒性)
- 剑指offer 3.4 代码的鲁棒性2- 合并两个排序的链表
- 剑指Offer面试题:15.反转链表
- 剑指Offer--15.反转链表
- 剑指offer第十五题【反转链表】c++实现
- 剑指offer 3.4 代码的鲁棒性1- 链表中倒数第K个节点
- 剑指offer代码解析——面试题15求链表中倒数第K个结点
- 【剑指offer】15反转链表
- 剑指offer代码解析——面试题15求链表中倒数第K个结点
- 剑指offer 01-06解答思路以及代码(顺序数组找特定数字,替换空格字符,链表反转输出,重建二叉树,两个栈实现队列效果,旋转数组最小元素)
- [剑指Offer] 15.反转链表
- 【剑指offer-解题系列(15)】反转链表