经典算法题,反转题直观的可以用栈来完成,但是浪费空间,一般链表题都要求直接用指针操作。
反转链表需要用到三个指针,pre指向当前节点反转后指向的节点,cur表示当前节点,next指向当前节点之后的节点以避免链表断裂
代码如下
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
ListNode* cur=pHead;
ListNode* next=NULL;
ListNode* pre=NULL;
while(cur!=NULL){
next=cur->next; //保存当前节点的下一节点防止链表断裂
cur->next=pre; //当前节点反转
pre=cur; // 当前节点成为下一节点的pre
cur=next; //下一节点变为当前节点
}
return pre;
}
};