算法学习
BM1 链表反转
https://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca?tpId=295&sfm=html&channel=nowcoder
题目描述:给定一个长度为n的链表,反转该链表,输出表头。
思路:
1.空链表直接返回;
2.两个指针,cur 当前结点, pre 前一个节点(初始为空);
3.遍历链表,每到一个节点,断开节点前,先临时变量记录下一个节点,当前节点指针指向上一个节点;
4.轮换pre 和 cur。
代码实现:
#include <iostream>
//定义链表
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
//1.空链表直接返回
if (pHead == NULL) {
return pHead;
}
//2.两个指针,cur 当前结点, pre 前一个节点(初始为空)
ListNode* cur = pHead;
ListNode* pre = NULL;
//遍历链表
while (cur != NULL) {
ListNode* temp = cur->next; //每到一个节点,断开节点前,先临时变量记录下一个节点
cur->next = pre; //当前节点next指向上一个节点
pre = cur; //pre更新为当前
cur = temp; //cur更新到下一个也就是temp
}
return pre;
}
};