剑指offer16 反转链表
2017-07-11 10:16
183 查看
错误代码
class Solution { public: ListNode* ReverseList(ListNode* pHead) { if(pHead == NULL) return NULL; ListNode* p1 = pHead; ListNode* p2 = pHead->next; ListNode* p3 = pHead->next->next; pHead->next = NULL; while(p3 != NULL){ p2->next = p1; p1 = p2; p2 = p3; p3 = p3->next; } p2->next = p1; return p2; } };
此代码会报“段错误:您的程序发生段错误,可能是数组越界,堆栈溢出(比如,递归调用层数太多)等情况引起”
如果链表只有一个节点,那p2就是空指针,p3就是空指针的下一个指针,但空指针是没有next的
正确代码
class Solution { public: ListNode* ReverseList(ListNode* pHead) { if(pHead == NULL) return NULL; else if(pHead->next == NULL) return pHead; ListNode* p1 = pHead; ListNode* p2 = pHead->next; ListNode* p3 = pHead->next->next; pHead->next = NULL; while(p3 != NULL){ p2->next = p1; p1 = p2; p2 = p3; p3 = p3->next; } p2->next = p1; return p2; } };
相关文章推荐
- 【面试题】剑指offer16--反转链表
- 剑指offer面试题16:反转链表
- 数据结构学习笔记1-链表反转(递归与非递归)
- 【面试题十六】反转链表
- 反转链表
- 题目16:反转链表
- 图解链表反转
- Leetcode Reverse Linked List II 反转特定区间的链表
- 反转单链表
- [总结] 到底如何反转一个链表
- 单链表反转(逆序)
- 剑指offer-面试题16.反转链表
- 剑指offer:反转链表
- 递归,迭代,堆栈三种方式实现单链表反转(C++)
- 【基础练习】链表排序,反转,划分,拷贝等
- 单向链表反转
- algrothm_reverse(algrothm+round)【反转链表】
- 剑指offer之十四---反转链表
- 链表反转
- 剑指offer——15.反转链表