【LeetCode算法学习笔记】递归思维:k个一组反转链表

labuladong算法公众号学习笔记
labuladong算法公众号学习笔记
labuladong算法公众号学习笔记

递归思维:k个一维反转链表

分析问题

链表是一种具有递归和迭代性质的数据结构。
大致算法流程:
1、先反转以head开头的k个元素。
2、将第k+1个元素作为head递归调用reverseKGroup函数。
3、将上述两个过程的结构连接起来。
base case:如果最后的元素不足k个,就保持不变。

代码实现

ListNode reverse(ListNode a,ListNode b){
    ListNode pre, cur, nex;
    pre = null; cur = a; nex = a;
    while(cur != b){
        nex = cur.next;
        cur.next = pre;
        pre = cur;
        cur = nex;
    }
    return pre;
}
ListNode reverseKGroup(ListNode head,int k){
    if(head == null) return null;
    ListNode a, b;
    a = b = head;
    for(int i = 0;i < k; i++){
        //不足k个,不需要反转
        if(b == null) return head;
        b = b.next;
    }
    //反转前k个元素
    ListNode newHead = reverse(a,b);
    //递归反转后续链表并连接起来
    a.next = reverseKGroup(b,k);
    return newHead;
}
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 我行我“速” 设计师:Amelia_0503 返回首页