反转链表综合(力扣)

206. 反转链表

代码

/**
 * 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 * cur = head;
        while(cur){
            ListNode * tp = cur->next;
            cur->next = prev;
            prev = cur;
            cur = tp;
        }
        return prev;
    }
};

92. 反转链表 II

代码

/**
 * 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* reverseBetween(ListNode* head, int left, int right) {
        ListNode * dummy = new ListNode(0,head),*p = dummy;
        for(int i = 0; i < left - 1; i++) p = p -> next;
        ListNode * prev = NULL, * cur = p->next;
        int n = right - left + 1;
        while(n--){
            ListNode * tp = cur -> next;
            cur ->next = prev;
            prev = cur;
            cur = tp;
        }
        p->next->next = cur;
        p->next =prev;
        return dummy->next;
    }
};
//从原链表的顺序上来看
//prev指向最后一个节点,cur指向这一段后续的一个节点, p为这一段的前一个节点

25. K 个一组翻转链表

代码

/**
 * 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) {}
 * };
 */
 //每一次反转结束后,从原链表上来看
 // prev指向这一段的末尾,cur指向这一段后续的下一个节点
class Solution {
public:
    ListNode* reverseKGroup(ListNode* head, int k) {
        int n = 0;
        for(ListNode * cur = head; cur; cur = cur->next)n++;//求长度

        ListNode * dummy = new ListNode(0,head), *p0 = dummy;
        ListNode * prev = NULL, *cur = head;
        while(n >= k){
            n -= k;
            for(int i = 0; i < k; i++){
                    ListNode * tp = cur->next;
                    cur->next = prev;
                    prev = cur;
                    cur = tp;
            }
            ListNode * tp = p0->next;
            p0->next->next = cur;
            p0 ->next = prev;
            p0 = tp;
        }
        return dummy->next;
    }
};

相关推荐

  1. 综合

    2024-03-17 13:40:05       20 阅读
  2. 206-

    2024-03-17 13:40:05       35 阅读
  3. 刷题笔记——

    2024-03-17 13:40:05       42 阅读
  4. II刷题

    2024-03-17 13:40:05       17 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-17 13:40:05       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-17 13:40:05       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-17 13:40:05       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-17 13:40:05       18 阅读

热门阅读

  1. cookies为什么会有csrf风险,为什么token可以避免

    2024-03-17 13:40:05       19 阅读
  2. 基础练习题之函数

    2024-03-17 13:40:05       19 阅读
  3. ClickHouse副本节点数据损坏恢复

    2024-03-17 13:40:05       22 阅读
  4. Clickhouse MergeTree原理(二)—— 表和分区的维护

    2024-03-17 13:40:05       18 阅读
  5. Centos设置docker自启动,以及容器程序自启动

    2024-03-17 13:40:05       20 阅读
  6. Python:递归函数

    2024-03-17 13:40:05       20 阅读
  7. html导航栏+下拉菜单+表单验证

    2024-03-17 13:40:05       23 阅读
  8. HTML

    HTML

    2024-03-17 13:40:05      18 阅读
  9. 在CentOS 7系统下通过二进制方式安装MySQL 8.0.34

    2024-03-17 13:40:05       20 阅读