题目:
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
示例:
输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL
分析:
定义两个指针: pre 和 cur ;pre 在前 cur 在后。
每次让 cur 的 next 指向 pre ,实现一次局部反转。
局部反转完成之后, pre 和 cur 同时往前移动一个位置
循环上述过程,直至 cur到达链表尾部
解答:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if(head == NULL)
return head;
ListNode* cur = head;
ListNode* pre = NULL;
while(cur != NULL){
ListNode *temp = cur->next;
cur->next = pre;
pre = cur;
cur = temp;
}
return pre;
}
};
执行用时:8 ms, 在所有 C++ 提交中击败了63.66%的用户
内存消耗:8 MB, 在所有 C++ 提交中击败了74.43%的用户