题目描述
输入一个链表,反转链表后,输出链表的所有元素。
解题思路
可以使用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或者整个链表只有一个节点的情况