题目描述
输入一个链表,反转链表后,输出链表的所有元素。
解题思路
可以使用3个指针,分别指向当前遍历到的结点(指针cur)、它的前一个结点(指针pre)及后一个结点(指针next)。在遍历过程中,首先记录当前节点的后一个节点,然后将cur->next=pre,再令pre=cur,cur=next,如此反复,直到当前节点的后一个节点为NULL时,则代表当前节点时反转后的头结点了。代码
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
if( pHead == NULL || pHead->next == NULL )
return pHead;
ListNode* pre = pHead;
ListNode* cur = pHead->next;
ListNode* next = cur->next;
pre->next = NULL;
while( 1 )
{
cur->next = pre;
pre = cur;
cur = next;
if( next == NULL )
break;
next = next->next;
}
return pre;
}
};
注意
反转后,原本的头结点变为最后一个节点,要令其next指向NULL
注意输入的链表头指针为nullptr或者整个链表只有一个节点的情况