题目描述

反转一个单链表。

示例:

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

思路

使用三个指针遍历单链表,对每一个链接点的指针进行反转。

p 和 q 指针进行反向,用 r 记录下一个节点,然后从前往后一直进行。

原来的 head 变为尾指针,要令 head 的 next 指向 NULL。

class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        if(head == NULL || head->next == NULL)
        {
            return head;
        }
        ListNode *p = head, *r;
        ListNode *q = p->next;
        head->next = NULL;
        while(q != NULL)
        {
            r = q->next;
            q->next = p;
            p = q;
            q = r;
        }
        return p;
    }
};