LeetCode题目: 25. Reverse Nodes in k-Group

LeetCode题目: 25. Reverse Nodes in k-Group

原题链接:https://leetcode.com/problems/reverse-nodes-in-k-group/description/

解题思路:

(虽说题目限制常数空间,但是用栈保存节点也是可行的一种方法,可以过)

将链表的前k位翻转,然后递归链表剩余的部分,最后返回头结点。

核心思想:

  1. 使用三个遍历节点对数组进行遍历,分别是preTemp,temp,nextTemp
  2. 反转时,使temp->next = preTemp即可
  3. 由于保存了nextTemp,可以继续向前遍历直到结束

代码细节:

  1. 当k<=1时,不需要反转。
  2. 递归到链表尾时,temp是空,因此nextTemp需要判断

坑点:

  1. k > list.size()时不反转

代码:

// 求List的长度 
int getSize(ListNode* head) {
    int size = 0;
    while (head != NULL) {
        size++;
        head = head->next;
    }
    return size;
}

ListNode* reverseKGroup(ListNode* head, int k) {
    // 三种情况不需要反转,直接输出
    if (k <= 1 || head == NULL || getSize(head) < k)  return head;

    // 此时至少有两个节点 
    ListNode *newHead;               // 反转后的新头结点 
    ListNode *preTemp = head;        // 遍历节点的前一个节点 
    ListNode *temp = head->next;     // 用于遍历的节点 
    ListNode *nextTemp = temp->next; // 遍历节点的后一个节点 

    for (int i = 1; i < k; i++) {
        // 修改节点指向 
        temp->next = preTemp;
        // 所有遍历用指针前移 
        preTemp = temp;
        temp = nextTemp;
        if (temp != NULL)  nextTemp = temp->next;
    }

    // 对头结点赋值
    newHead = preTemp; 

    // 未反转节点链接
    head->next = reverseKGroup(temp, k);

    return newHead;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值