1. 题目描述
输入一个链表,反转链表后,输出链表的所有元素。
2. 题目分析
题目的意思就是,假若你输入的链表是{5, 4, 3, 2, 1},那么输出的结果应该是{1, 2, 3, 4, 5}。一开始犯了一个逻辑性的错误,就是单纯的从头遍历,然后一次把前面的元素挪到链表后面去了。知道运行结果出来才反映过来这不是没变么。。。
正确的思路应该是将指针倒转。
原链表是:5 -> 4 -> 3 -> 2 -> 1
倒转后是:5 <- 4 <- 3 <- 2 <- 1
3. 题目解答——cpp
/*
struct ListNode {
int val;
struct ListNode* node;
ListNode(int x):
val(x),next(NULL){}
};*/
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
if (pHead == NULL || pHead->next == NULL)
return pHead;
ListNode* p;
ListNode* q;
ListNode* r;
p = pHead;
q = p->next;
pHead->next = NULL;
while(q){
r = q->next;
q->next = p;
p = q;
q = r;
}
pHead = p;
return pHead;
}
};