反转链表(剑指Offer-24)

题面

定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。

示例

1输入: 1->2->3->4->5->NULL
2输出: 5->4->3->2->1->NULL

限制

10 <= 节点个数 <= 5000

思路

链表原地转置。

代码

 1/**
 2 * Definition for singly-linked list.
 3 * struct ListNode {
 4 *     int val;
 5 *     ListNode *next;
 6 *     ListNode(int x) : val(x), next(NULL) {}
 7 * };
 8 */
 9class Solution {
10public:
11    ListNode* reverseList(ListNode* head) {
12        ListNode *h=NULL, *pre=head, *last=head;
13        while(pre){
14            last = last->next;
15            pre->next = h;
16            h = pre;
17            pre = last;
18        }
19        return h;
20    }
21};