1、算法思路
断掉当前节点向后的指针,改为向前
2、步骤
step 1:优先处理空链表,空链表不需要反转。
step 2:我们可以设置两个指针,一个当前节点的指针,一个上一个节点的指针(初始为空)。
step 3:遍历整个链表,每到一个节点,断开当前节点与后面节点的指针,并用临时变量记录后一个节点,然后当前节点指向上一个节点,即可以将指针逆向。
step 4:再轮换当前指针与上一个指针,让它们进入下一个节点及下一个节点的前序节点。
3、代码
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
ListNode *pre = NULL;
ListNode *cur = pHead;
while(cur!=NULL){
ListNode *cur_next = cur->next; //指向当前节点的下一个结点
cur->next = pre; //逆转链表
pre = cur; //向后进一步
cur = cur_next;
}
return pre;
}
};