15.反转链表
题目描述
输入一个链表,反转链表后,输出新链表的表头。
思路
考虑使用三个节点,分别指向当前遍历到的结点、它的前一个结点以及后一个结点。在遍历的时候,做当前结点的尾结点和前一个结点的替换。
代码实现
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
//思路 使用三个指针,分别指向当前遍历到的节点,其前一个,后一个,当遍历时,做当前结点和为结点的一个替换
ListNode* pReversedHead = NULL; //反转后的链表头指针
ListNode* pNode = pHead;// headptr
ListNode* pPrev =NULL;// 节点之前一个节点的指针
while(pNode != NULL){
ListNode* pNext = pNode->next;//遍历
if(pNext == NULL){
pReversedHead = pNode; //遍历到尾结点,把尾结点当做反转后的头结点
}
pNode->next = pPrev;//在遍历时,当前结点的尾结点和之前的一个节点做一个替换,这里不清楚还要想一下
pPrev = pNode;
pNode = pNext;
}
return pReversedHead;
}
};