美文网首页
LC206 翻转链表 &&LC92

LC206 翻转链表 &&LC92

作者: 锦绣拾年 | 来源:发表于2020-03-12 12:19 被阅读0次

迭代写法
遇到了一点点小小的坑
自然而然想到三指针,但是一直超出时间限制
后来看看别人的题解
发现别人是用NULL head head->next
我是用 head head->next head->next->next
因此我需要让第一个head->next=NULL
不然就会形成一个循环链表。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        if(!head)
            return head;
        if(!head->next)
            return head;
        
//         ListNode* fir=NULL;
//         ListNode* sec=head;
        // ListNode*
        if(head->next &&!head->next->next){
            ListNode* current=head->next;
            current->next=head;
            head->next=NULL;//important
            return current;
        }
        ListNode* current=head->next->next;
        ListNode* fir=head;
        ListNode* sec=head->next;
        fir->next=NULL;//important 别人
//         // sec=current->next;
//         int i=0;
        while(current){ 
            sec->next=fir;
            fir=sec;
            sec=current;
            current=current->next;
        }
        sec->next=fir;
//         // current->next=fir;
        return sec;
        
    }
};

92这个题复杂一点点
执行用时 :0 ms, 在所有 C++ 提交中击败了100.00%的用户
内存消耗 :8.6 MB, 在所有 C++ 提交中击败了23.84%的用户

反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。

说明:
1 ≤ m ≤ n ≤ 链表长度。

示例:

输入: 1->2->3->4->5->NULL, m = 2, n = 4
输出: 1->4->3->2->5->NULL

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-linked-list-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* reverseBetween(ListNode* head, int m, int n) {
        int i=1;
        if(!head||!head->next)
            return head;
        if(m==n)
            return head;
        // if(head->next&&!head->next->next){
        //     ListNode* current=head->next;
        //     current->next=head;
        //     head->next=NULL;//important
        //     return current;
        // }
        ListNode* fir=NULL;
        ListNode* sec=head;
        ListNode* thi=head->next;
        
        while(i<m){
            fir=sec;
            sec=sec->next;
            i++;           
            thi=thi->next;
        }
        
        //i=m
        ListNode* newhead=fir;
        ListNode* newtail=sec;
        fir=NULL;
        while(i<n){
            sec->next=fir;
            fir=sec;
            sec=thi;
            thi=thi->next;
            i++;
        }
        
        sec->next=fir;
        if(newhead)
            newhead->next=sec;
        else{
            newtail->next=thi;
            return sec;
        }
            
        newtail->next=thi;
        return head;
        
        

    }
};

相关文章

  • LC206 翻转链表 &&LC92

    迭代写法遇到了一点点小小的坑自然而然想到三指针,但是一直超出时间限制后来看看别人的题解发现别人是用NULL hea...

  • 翻转链表

    翻转链表 描述翻转一个链表 样例给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->nul...

  • 25. K 个一组翻转链表

    K个一组反转链表 翻转链表给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。 k 是一个正整数,它...

  • 链表翻转

    给定单向链表,返回翻转后的链表

  • 链表

    1.翻转链表链表的定义 翻转 快慢指针找链表 的中间位置 3.有序链表的合并 4.判断链表中是否有环解法1: 借助...

  • Swift - LeetCode - 翻转链表

    题目 翻转链表 问题: 翻转链表中第m个节点到第n个节点的部分 说明: m,n满足1 ≤ m ≤ n ≤ 链表长度...

  • K 个一组翻转链表(递归,Kotlin)

    25. K 个一组翻转链表 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。 k 是一个正整数,它...

  • leetcode第九十二题—反转链表 II

    又是一道升级题,还记得原来的翻转链表嘛,这个是要求指定m和n翻转链表。或许你忘了链表翻转怎么做,我编一个口诀:要问...

  • 【LeetCode】25.K个一组翻转链表

    题目描述 25.K个一组翻转链表 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。 k是一个正整数...

  • 翻转单链表

    翻转单链表 方法一:将单链表头插到一个新链表中 浪费空间,不过简单 方法二:使用三个指针遍历单链表,逐个点进行翻转...

网友评论

      本文标题:LC206 翻转链表 &&LC92

      本文链接:https://www.haomeiwen.com/subject/ycxujhtx.html