剑指Offer系列-面试题16:反转链表
2017-02-15 16:41
232 查看
题目:定义一个函数,输入一个链表的头结点,反转该链表并输出翻转后链表的头结点。链表结点定义如下:
思路:创建3个指针,分别指向连着的3个结点。
步骤:
1、将中间结点的pNext指向第一个结点,然后第一个结点指向第二个结点,第二个结点指向第三个结点,第三个结点指向它的后一个结点;
2、重复上面步骤直到中间结点为空,此时第一个结点就是翻转后的链表的头结点。
代码:
还有另一种方法,创建一个数组,将所有的结点的值放入数组中,然后从头到尾遍历链表,将数组中从尾到头的值放入相应结点中,但是此种方法由于不知道链表的总结点数还需要多遍历一遍链表,效率不高。
struct ListNode { int value; ListNode *pNext; };
思路:创建3个指针,分别指向连着的3个结点。
步骤:
1、将中间结点的pNext指向第一个结点,然后第一个结点指向第二个结点,第二个结点指向第三个结点,第三个结点指向它的后一个结点;
2、重复上面步骤直到中间结点为空,此时第一个结点就是翻转后的链表的头结点。
代码:
ListNode* ReverseList(ListNode* pHead) { ListNode* pReversedHead = NULL; ListNode* pNode = pHead; ListNode* pPrev = NULL; while(pNode != NULL) { ListNode* pNext = pNode->m_pNext; if(pNext == NULL) pReversedHead = pNode; pNode->m_pNext = pPrev; pPrev = pNode; pNode = pNext; } return pReversedHead; }
还有另一种方法,创建一个数组,将所有的结点的值放入数组中,然后从头到尾遍历链表,将数组中从尾到头的值放入相应结点中,但是此种方法由于不知道链表的总结点数还需要多遍历一遍链表,效率不高。
相关文章推荐
- 剑指offer面试题16-反转链表
- (剑指Offer)面试题16:反转链表
- 《剑指offer》面试题16—反转链表
- 《剑指Offer》读书笔记--面试题16:反转链表
- 剑指offer——面试题16:反转链表
- 剑指offer面试题16:反转链表
- (未完成)《剑指offer》(面试题16):反转链表
- 剑指offer 面试题16 反转链表
- 《剑指Offer》学习笔记--面试题16:反转链表
- 剑指Offer面试题16(Java版):反转链表
- 《剑指Offer》面试题16:反转链表
- 剑指Offer面试题16反转链表(递归和非递归),面试题17合并两个排序的链表(递归)
- 【剑指offer系列】 反转链表___16
- 【剑指offer】面试题16、反转链表
- 面试题16:反转链表
- 剑指offer面试题16——反转链表
- 面试题16:反转链表
- 剑指Offer面试题16 反转链表
- 《剑指Offer》面试题:反转链表
- 编程之美—面试题16 反转链表