1-Description
输入一个链表,反转链表后,输出新链表的表头,下面是链表的定义:
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
2-Solution
对于链表反转,我们可以简单理解为指针的反转,也就是每一个结点指针指向的反转:
这里可以采用辅助指针的方式来进行历求解,以下面的链表为例具体分析如下:

1-首先我们需要定义三个指针,分别指向当前结点(cur)、前一结点(prev)、后一节点(next)

2-然后开始从前往后进行遍历,在遍历的过程中对指针进行反转
第一次遍历:将cur->next赋给next指针,再将prev赋给cur->next,这样就将指针反转了,反转之后cur指着需要继续后移,将cur再赋给prev,next再赋给cur,这样可以得到下面的结果:

继续进行遍历:



3-直到cur指针遍历完尾结点,而此时prev已经移动到尾结点,这样返回尾结点即得到链表的遍历了:

根据以上思路,实现代码如下:
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
if(pHead == NULL) return NULL;//如果列表为空直接返回
ListNode* prev = NULL;
ListNode* cur = pHead;
ListNode* next = NULL;
while(cur != NULL){
next = cur->next;
cur->next = prev;
prev = cur;
cur = next;
}
return prev;//返回反转链表之后的头结点
}
};
本文详细介绍如何使用辅助指针的方法反转链表,并提供完整的代码实现。通过定义三个指针(当前结点、前一结点、后一节点),逐步遍历并反转指针,最终返回新的链表头结点。
1639

被折叠的 条评论
为什么被折叠?



