思路1:
遍历链表,将每个结点的前项记住,将next指针变为prior指针
即 1->2->3->O 变为 O->3->2->1
代码1:
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* prev = nullptr;
ListNode* curr = head;
while (curr) {
//防止原来链表后项丢失
ListNode* next = curr->next;
//后指针向前指
curr->next = prev;
//当前元素为下一元素的前项
prev = curr;
//原来链表后移
curr = next;
}
return prev;
}
};
思路2:
创建一个新链表,使用前插法将元素一个个插入链表头结点后
代码2:
class Solution {
public:
ListNode* reverseList(ListNode* head) {
//创建新结点指针
ListNode* newhead =new ListNode;
newhead->next=NULL;
ListNode* s;
while (head) {
//新结点赋值
s=new ListNode;//注意一定要new新的内存,不然只有一个结点
s->val=head->val;
//s插入新链表 头指针 之后
s->next=newhead->next;
newhead->next=s;
//原链表后移
head=head->next;
}
return newhead->next;
}
};