输入一个链表,反转链表后,输出新链表的表头。
相信很多小伙伴,都并不喜欢操作链表以及指针,但是作为一个过来人,还是希望你能够正视数据结构以及算法这两个部分的内容,因为以后走向社会,也就只有这两样能够让你在职场立足。
考题来自牛客网,以下代码便是初始代码片段,分析代码结构,开始着手思考如下进行链表反转吧。
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/ // 结构体(链表节点)
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
}
}; // 类,类内封装接口函数对链表进行反转操作
由初始代码片段可以得出以下的信息。那么就开始分析如何实现链表反转吧。
接口函数接收了一个链表的表头指针
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
ListNode * p_pre = nullptr; // 定义一个反转之后链表的表头指针
ListNode * p_cur = pHead; // 当前链表节点指针
ListNode * p_next = nullptr; // 当前链表节点指针的后一个节点指针
// 判断当前节点指针是否为空,
// 为空,说明当前指针已经指向了原链表的最后一个节点的下一个节点(指向空)
while(p_cur)
{
p_next = p_cur->next; // 为当前节点的下一个节点指针变量赋值
p_cur->next = p_pre; // 修改当前节点的下一个节点指向
p_pre = p_cur; //
p_cur = p_next;
}
return p_pre;
}
};
如果对你有帮忙,麻烦点赞支持一下, 谢谢……