链表问题---将单链表的每K个节点之间逆序
来源:互联网 发布:淘宝网找回密码 编辑:程序博客网 时间:2024/05/29 18:02
【题目】
给定一个单链表的头节点head,实现一个调整单链表的函数,使得每K个节点之间逆序,如果最后不够K个节点,则不调整最后的节点。
【基本思路】
方法一。时间复杂度O(N),空间复杂度O(K)。
利用栈结构,依次遍历链表,将节点压入栈中,栈中节点每凑到k个就将这k个节点进行逆序,然后再连接入链表中。需要注意头节点的更新以及每组节点两头的连接。代码实现如下:
#python3.5def reverseKNode(head, k): def reverse(stack, pre, next): while stack: cur = stack.pop() if pre != None: pre.next = cur pre = cur pre.next = next return pre if head == None or head.next == None or k < 2: return head stack = [] cur = head newHead = head pre = None while cur != None: next = cur.next stack.append(cur) if len(stack) == k: pre = reverse(stack, pre, next) newHead = cur if newHead == head else newHead cur = next return newHead
方法二。时间复杂度O(N),空间复杂度O(1)。
不需要利用栈,用变量记录每一组开始的第一个节点和最后一个节点,然后直接逆序调整,把这一组的节点都逆序。需要注意头节点的更新以及每组节点两头的连接。代码实现如下:
def reverseKNode2(head, k): def reverse2(head, left, right): pre = None start = head while head != right: next = head.next head.next = pre pre = head head = next if left != None: left.next = pre start.next = right if head == None or head.next == None or k < 2: return head pre = None cur = head count = 0 while cur != None: count += 1 next = cur.next if count == k: start = head if pre == None else pre.next head = cur if pre == None else head reverse2(start, pre, next) pre = start count = 0 cur = next return head
阅读全文
2 0
- 链表问题---将单链表的每K个节点之间逆序
- 将单链表的每k个节点之间逆序
- 将单链表的每k个节点之间逆序
- day11之求二叉树的高度+销毁一颗二叉树+链表每K个节点之间逆序
- C++将单链表的每K个结点之间逆序改进版空间复杂度O(1)
- C++ 将单链表的每K个结点逆序
- 每天一道LeetCode-----将链表每k个节点逆序一次
- 单向链表每k个数逆序拼接
- 输入k 实现链表每k项都逆序输出
- 链表的k逆序
- 数据结构与算法分析笔记与总结(java实现)--链表13:每k个结点逆序问题
- 输出链表的倒数第k个节点
- 寻找链表的倒数第k个节点
- 寻找单向链表的倒数第k个节点
- 链表的倒数第k个节点
- 输出链表的倒数第k个节点
- 寻找链表的倒数第K个节点
- 单向链表的倒数K个节点
- 面向对象五大原则、三大特征
- 解决BackBox中Fcitx输入法中文输入状态下不显示候选词框的问题
- C语言中控制输出格式
- My first blog
- leetcode练习(441,442)python实现
- 链表问题---将单链表的每K个节点之间逆序
- 洛谷P2049 魔术棋子
- Mybatis Configuration.xml中properties属性定义
- ADV-4-道路与航路
- 原生js开发简易语音发声的计算器
- 决定换一个新的博客(blog.csdn.net/sty945)
- Centos之常见目录作用介绍
- Mybatis全局配置文件Configuration.xml详解
- c#中的delegate(委托)和event(事件)