题目描述
输入一个链表,反转链表后,输出新链表的表头。
示例1
输入{1,2,3}
返回值{3,2,1}
解法
很经典的一道单链表题,拿到题目第一时间想到头插法。
拿到一个算法首先考虑特殊情况,如果链表本身为空,返回空。
接着,是循环的主体部分,这里需要两个指针,一个指向当前结点,一个指向下一结点。
坑:一开始给p指针赋值后,要将头结点的next指针置为空。
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
if(pHead == NULL) return NULL;
ListNode* p = pHead->next;
pHead->next = NULL;
ListNode* n = NULL;
while(p != NULL){
n = p->next;
p->next = pHead;
pHead = p;
p = n;
}
return pHead;
}
};