描述

给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。

要求:空间复杂度 O(1),时间复杂度 O(n) 。

当输入链表{1,2,3}时,

经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。

以上转换过程如下图所示:

【链表】剑指offer:反转链表_结点

增加一个首节点,遍历链表用头插法插入首节点后(p结点遍历,q结点记录位置)

代码:

class Solution {
public:
    ListNode* ReverseList(ListNode* pHead) {
    ListNode *head=new ListNode(0);
    ListNode *p=pHead,*q;
    while(p){
        q=p->next;
        p->next=head->next;
        head->next=p;
        p=q;
    }
        return head->next;
    }
};