题目:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
题解1(迭代):
思路:如1→2→3→∅,我们想要把它改成 ∅←1←2←3。则可以利用两个指针,一个保存前一个节点,一个保存后一个节点,然后将其倒序。但是我们要注意每次倒序之前,要利用一个指针变量保存原来的下一个结点,否则后续的链表将找不到。
/**
* 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) {
ListNode* prev=NULL;
ListNode* curr=head;
ListNode* next;
while(curr){
next=curr->next;
curr->next=prev;
prev=curr;
curr=next;
}
return prev;
}
};
题解2(利用栈):
思路:利用栈,将链表压栈,然后定义一个结点来连接pop出来的链表,新链表即为反转链表。代码略。