面试题-反转链表
2014-10-19 11:12
204 查看
有这样一道面试题:定义一个函数,输入一个链表的头结点,反转该链表并输出翻转后链表的头结点。
分析:一种简单的思路是,重新定义一个头指正,顺序遍历原来的链表,将链表中每个值赋给新申请的结点,将该结点在新表的表头插入。恐怕这种思路是比较简单的,但是要先弄清是否允许开辟新的空间来做这件事。
如果不予许申请新的空间,那该如何处理呢?
我们可以用一些中间变量来处理这个问题:
链表结点的定义:
我的代码:
《剑指offer》上的代码:
注意:一大忌讳的是我代码没实际运行过,囧!如果谁运行有问题,请指正啊!
分析:一种简单的思路是,重新定义一个头指正,顺序遍历原来的链表,将链表中每个值赋给新申请的结点,将该结点在新表的表头插入。恐怕这种思路是比较简单的,但是要先弄清是否允许开辟新的空间来做这件事。
如果不予许申请新的空间,那该如何处理呢?
我们可以用一些中间变量来处理这个问题:
链表结点的定义:
struct ListNode{ int m_nValue; ListNode * m_pNext; };
我的代码:
ListNode * ReverseList(ListNode *pListHead){ if(pListHead == NULL) return; //如果链表只有一个结点 if(pListHead->m_pNext == NULL) return pListHead; ListNode * pNewHead = NULL; ListNode * pNext = pListHead; ListNode * tmp = pListHead; while(pNext != NULL){ tmp = pNext; pNext = pNext->m_pNext; tmp->m_pNext = pNewHead; pNewHead = tmp; } return pNewHead; }
《剑指offer》上的代码:
ListNode * ReverseList(ListNode * pHead){ ListNode* pReverseHead = NULL; ListNode* pNode = pHead; ListNode* pPrev = NULL; while(pNode != NULL){ ListNode* pNext = pNode->m_pNext; if(pNext == NULL) pReverseHead = pNode; pNode->m_pNext = pPrev; pPrev = pNode; pNode = pNext; } return pReverseHead; }
注意:一大忌讳的是我代码没实际运行过,囧!如果谁运行有问题,请指正啊!
相关文章推荐
- 剑指offer之面试题16 :反转链表
- 【剑指offer】面试题16:反转链表
- OK 面试题24 反转链表
- 面试题14:反转链表
- 《剑指Offer》面试题:反转链表
- bat面试题 python 单链表反转排序
- 剑指offer-chapter3-面试题16-反转链表(java)
- 面试题16 反转链表
- 经典面试题:反转链表
- 剑指offer面试题16-反转链表
- 剑指offer 面试题16:反转链表(Leetcode 206: Reverse Linked List) 题解
- 剑指offer——面试题16:反转链表
- 面试题:反转链表
- 《剑指offer》面试题16—反转链表
- 剑指Offer面试题16反转链表(递归和非递归),面试题17合并两个排序的链表(递归)
- 剑指offer:面试题16 反转链表
- [剑指offer][面试题16]反转链表
- 面试题16:反转链表
- 链表面试题之常规题1 -- 反转链表
- 剑指Offer之面试题16:反转链表