题解 | #反转链表#
反转链表
https://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
ListNode* ptem = nullptr; //辅助指针
ListNode* pnow = pHead; //当前指针
ListNode* pnex = nullptr; //当前的下一个位置 指向空是为了防止pnow为空
while (pnow)
{ /*************初始位置**************************/
// pnow pnex->[nullptr] ptem->[]nullptr]
// |
// v
// [1]->[2]->[3]->[4]
pnex = pnow->next;
/*************pnow不空pnex赋值*******************/
// pnow pnex ptem->[]nullptr]
// | |
// v v
// [1]->[2]->[3]->[4]->[nullptr]
pnow->next = ptem;
/*************pnow->next反转*******************/
// pnow pnex
// | |
// v v
// [1] [2]->[3]->[4]->[nullptr]
// |
// v
//ptem->[nullptr]
ptem = pnow;
/*************ptem移动到pnow位置****************/
// pnow pnex
// | |
// v v
// ptem->[1] [2]->[3]->[4]->[nullptr]
// |
// v
// [nullptr]
pnow = pnex;
/*************pnow前进************************/
// pnex
// |
// v
// ptem->[1] pnow->[2]->[3]->[4]->[nullptr]
// |
// v
// [nullptr]
//新一轮循环
}
return ptem;
}
};
#每日一练#