题目描述
输入一个链表,反转链表后,输出新链表的表头。
解
题
思
路
:
\color{blue}解题思路:
解题思路:
非常简单的题,只是涉及到指针,有些不是很理解的指针的可能会比较懵,请看下图。
第1步:将newPHead
指向pHead
,然后pHead
后移,最后newPHead->next
需要置空(翻转后链表的尾节点的next肯定要置NULL,否则产生了野指针)
第2步:使用tempPtr
指向pHead
,然后pHead
后移,再将tempPtr
接到newPHead
的头部。
剩下的未翻转链表的节点重复第2步,直到pHead
为空即可。
代 码 实 现 : \color{blue}代码实现: 代码实现:
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
if (pHead == NULL){
return NULL;
}
//newPHead用于指向反转后的链表头结点,初始化为pHead
ListNode *newPHead = pHead, *tempPtr;
//然后将pHead后移
pHead = pHead->next;
//翻转前的链表是翻转后链表的尾端,需要置空
newPHead->next = NULL;
//遍历pHead剩余的节点
while (pHead != NULL) {
//使用tempPtr指向剩余待翻转链表段的头结点,pHead后移
tempPtr = pHead;
pHead = pHead->next;
//将tempPtr放入新链表的头部,并且更新newPHead为新头部节点
tempPtr->next = newPHead;
newPHead = tempPtr;
}
return newPHead;
}
};
题
目
推
荐
:
\color{blue}题目推荐:
题目推荐:
题1、LeetCode 四数之和
题2、LeetCode 最接近的三数之和
题3、LeetCode 删除链表的倒数第N个节点(O(n) + 图解)