题目描述
输入一个链表,反转链表后,输出新链表的表头。
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32M,其他语言64M
解题分析
链表反向是链表里面的常见操作;
只需要引入两个指针,p1指向当前pHead节点的前一个节点,p2指向pHead节点的下一个节点;
接下来就是捋清每次循环时,各个指针的相互关系:
注意:首次循环的时候,p1指向的null,而链表的首节点1,反转后就是尾节点,指向p1=null,就是ok的了。
源代码
/*
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* p1=NULL;
ListNode* p2=NULL;
while(pHead!=NULL){
p2=pHead->next;
pHead->next=p1;
p1=pHead;
pHead=p2;
}
return p1;
}
};