链表区间逆序
Description
将单个链表的每K个节点之间逆序,打印出新链表;最后不足K的节点数不需要逆序;要求时间复杂度为O(n),额外空间复杂度为O(1)。
Input
输入第一行为用例个数, 每个测试用例输入的每一行的值用空格隔开,第一个表示链表长度,中间为节点值,最后代表K。
Output
输出的每一行为新的链表,节点值用空格隔开,末尾不要空格。
Sample Input 1
2
8 1 2 3 4 5 6 7 8 3
8 a b c d e f g h 4
Sample Output 1
3 2 1 6 5 4 7 8
d c b a h g f e
思路
首先,如果K值小于2,则不用进行任何调整。
方法一:利用栈结构,时间复杂度O(N),空间复杂度O(K)
方法二:不用栈,直接在链表内调整,利用变量
Python3
# 将单个链表的每K个节点之间逆序,打印出新链表;最后不足K的节点数不需要逆序;要求时间复杂度为O(n),额外空间复杂度为O(1)。
# 方法一:利用栈结构,时间复杂度为O(N),空间复杂度为O(K)
# 方法二:不用栈结构,在原链表上进行调整,用变量记录每一组开始的第一个节点和最后一个节点,然后逆序调整,
# 同时注意对第一组节点的特殊处理,因为要改变头结点
class Node(object):
def __init__(self, value, next=None):
self.value = value
self.next