给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
首先定义指针cur指向链表头指针head,temp是中间指针,保存cur指针指向的下一个节点。指针p首先为NULL。
时间复杂度o(n) 空间复杂度o(1)
自己的方法:
三个指针: p ,q ,temp
一定要有一个指针temp指向头结点,始终是头结点和当前节点之间交换
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if(head == NULL || head->next==NULL)
{
return head;
}
ListNode * p = head;
ListNode * q= head->next;
ListNode * temp = head;//保存头结点
while(q)
{
p->next = q->next;
q->next = temp;
temp = q;
q= p->next;
}
return temp;
}
};
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode * temp ;
ListNode* cur=head;
ListNode* p =NULL;
while(cur)
{
temp=cur->next;
cur->next=p;
p=cur;
cur=temp;
}
return p;
}
};