【从零开始刷力扣006】leetcode206
这里只复现代码,并写一下思路206-反转链表
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val = val; }* ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode reverseList(ListNode head) {//非空判断if(head==null||head.next==null){return head;}//三个节点ListNode pre=null;ListNode cur=head;ListNode nxt=head.next;//cur不为空时就可以连到“新链表”上while(cur!=null){//反转,把当前节点的next指向precur.next=pre;//接着pre移动,pre=cur;cur=nxt;if(nxt!=null){nxt=nxt.next;}}return pre;}
}
/*** 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) {//法2:递归解法,需要好好理解//第一个判断是确定非空,第二个判断用来找新链表头节点if (head == nullptr || head->next == nullptr) {return head;}ListNode* Last=reverseList(head->next);//环形赋值head->next->next=head;//置空head->next=nullptr;//Last找到后就不再改变了,它是新链表的头节点,后面的过程都是递归回溯后的head节点在改变。注意链表尾节点要置空 防止成环。return Last;}
};
一个迭代解法,一个递归解法。重点在于思考递归是怎样执行的,要对流程有大的把握。现阶段我还是感觉有些困难,加油b!