【剑指Offer】面试题16:反转链表
2017-07-17 16:14
369 查看
一:题目描述
输入一个链表,反转链表后,输出链表的所有元素。
二:解题思路
想反转一个链表,对于每一结点要改变它Pre与nextj结点的方向
所以我们必须要记住当前节点,它的前一个结点以及后一个结点
同时要考虑边界情况 头指针为空或者只包含一个结点
三:代码实现
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
//想反转一个链表,对于每一结点要改变它Pre与nextj结点的方向
//所以我们必须要记住当前节点,它的前一个结点以及后一个结点
//同时要考虑边界情况 头指针为空或者只包含一个结点
//边界条件:头结点为空或只包含一个结点,不用反转,直接返回头指针
if(pHead==NULL || pHead!=NULL && pHead->next==NULL)
return pHead;
//包含多个结点,反转需要记录当前节点,它的前一个结点,它的后一个结点
ListNode* pNode=pHead; //当前节点
ListNode* pPre=NULL; //初始化当前节点的前一个节点为空
//因为反转后头结点变成节点,头结点的前一个节点变成尾结点的下一个节点,所以设置NULL
ListNode* pReverseHead=NULL; //反转后的头结点初始化为空,最终他等于原始链表的尾结点
while(pNode!=NULL){
//保存当前节点的下一个节点
ListNode* pNext=pNode->next;
//如果是尾结点,将其赋值给反转后的头指针
if(pNext==NULL)
pReverseHead=pNode;
//改变指针方向
pNode->next=pPre;
//修改pPRe:当前节点为下一个节点的前节点
pPre=pNode;
//遍历下一个节点
pNode=pNext;
}
return pReverseHead;
}
};
输入一个链表,反转链表后,输出链表的所有元素。
二:解题思路
想反转一个链表,对于每一结点要改变它Pre与nextj结点的方向
所以我们必须要记住当前节点,它的前一个结点以及后一个结点
同时要考虑边界情况 头指针为空或者只包含一个结点
三:代码实现
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
//想反转一个链表,对于每一结点要改变它Pre与nextj结点的方向
//所以我们必须要记住当前节点,它的前一个结点以及后一个结点
//同时要考虑边界情况 头指针为空或者只包含一个结点
//边界条件:头结点为空或只包含一个结点,不用反转,直接返回头指针
if(pHead==NULL || pHead!=NULL && pHead->next==NULL)
return pHead;
//包含多个结点,反转需要记录当前节点,它的前一个结点,它的后一个结点
ListNode* pNode=pHead; //当前节点
ListNode* pPre=NULL; //初始化当前节点的前一个节点为空
//因为反转后头结点变成节点,头结点的前一个节点变成尾结点的下一个节点,所以设置NULL
ListNode* pReverseHead=NULL; //反转后的头结点初始化为空,最终他等于原始链表的尾结点
while(pNode!=NULL){
//保存当前节点的下一个节点
ListNode* pNext=pNode->next;
//如果是尾结点,将其赋值给反转后的头指针
if(pNext==NULL)
pReverseHead=pNode;
//改变指针方向
pNode->next=pPre;
//修改pPRe:当前节点为下一个节点的前节点
pPre=pNode;
//遍历下一个节点
pNode=pNext;
}
return pReverseHead;
}
};
相关文章推荐
- 剑指offer_面试题16_反转链表(两种方法)
- 【剑指offer】面试题16、反转链表
- 【面试题】剑指Offer-16-反转链表
- 剑指offer面试题16:反转链表
- 【剑指offer】面试题16:反转链表
- 剑指offer面试题16——反转链表
- 剑指Offer之面试题16:反转链表
- 剑指offer-面试题16:反转链表
- 剑指offer——面试题16:反转链表
- 剑指offer面试题16 反转链表
- 剑指offer面试题16之反转链表
- 【剑指offer】面试题16:反转链表
- 【剑指offer 面试题16】反转链表
- 【剑指offer】3.4代码的鲁棒性——面试题16:反转链表
- 【剑指offer】面试题16:反转链表
- 剑指offer-面试题16-反转链表
- [剑指offer][面试题16]反转链表
- 【剑指Offer学习】【面试题16 :反转链表】
- 剑指offer 面试题16:反转链表(Leetcode 206: Reverse Linked List) 题解
- 剑指Offer面试题16(Java版):反转链表