什么是链表
n个结点链接成一个链表。
结点是链表的基本单元,单个结点包含指针域和数据域。
把存储数据元素信息的域称为数据域,把存储直接后继位置的域称为指针域。指针域中存储的信息称为指针或链。这两部分信息组成数据元素称为存储映像,称为结点(Node)。
假设p是指向线性表第i个元素的指针,则该节点ai的数据域我们可以用p->data来表示,p->data的值是一个数据元素,节点ai的指针域可以用p->next来表示,p->next的值是一个指针。
反转链表的思路
首先定义两个指针:pre和cur,cur指向当前结点,pre指向当前结点的前一个结点。
然后遍历链表的同时,当前 node (curr)的下一个(next)指向前一个 node(prev), 在改变当前 node 的指向之前,用一个临时变量记录当前 node 的下一个 node(curr.next)。这样就完成了第一个结点和第二个结点的反转。然后再将pre和cur往后挪,pre指向当前结点,cur指向当前结点的后一个结点(刚刚存储的临时变量temp),这样一次循环就完成了。经过多次循环,链表的反转就完成了。
代码实现
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
if (pHead == NULL)
return NULL;
ListNode* cur = pHead;
ListNode* pre = NULL;
while (cur != NULL) {
//断开链表,要记录后续一个 fast-template
ListNode* temp = cur->next;
//当前的next指向前一个
cur->next = pre;
//前一个更新为当前
pre = cur;
//当前更新为刚刚记录的后一个
cur = temp;
}
return pre;}
};
参考链接:https://www.zhihu.com/question/57414576
https://blog.51cto.com/u_13691366/3268583
牛客网