题目要求
输入一个链表,反转链表后,输出新链表的表头
解题思路
要想反转链表,我们要做的就是,把当前节点的后继指向该点的前驱,然后一直重复迭代到结束。这里边有两个关键的点:
1、如何指向节点的前驱。(用一个指针记录前驱结点)
2、如何保证链表不被截断。(用一个指针在操作前先记录后继节点)
为保证程序的健壮性,也要考虑输入为空,和只有一个节点的情况。
主要代码c++
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
ListNode* pPrev = nullptr, *pCur = pHead, *pNext;
while(pCur != nullptr)
{
pNext = pCur->next; //需要先保存后一个点
pCur->next = pPrev; //指向前驱
pPrev = pCur; // 移动进行迭代
pCur = pNext;
}
return pPrev;
}
};
主要代码 python
class Solution:
# 返回ListNode
def ReverseList(self, pHead):
# write code here
pre = None
while pHead:
nex = pHead.next
pHead.next = pre
pre = pHead
pHead = nex
return pre
更加具体的方法介绍:
翻转一个链表