给出一个链表,每 k 个节点一组进行翻转,并返回翻转后的链表。
k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么将最后剩余节点保持原有顺序。
示例 :
给定这个链表:1->2->3->4->5
当 k = 2 时,应当返回: 2->1->4->3->5
当 k = 3 时,应当返回: 3->2->1->4->5
说明 :
- 你的算法只能使用常数的额外空间。
- 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
方法一: 一开始自己想得比较弱智的方法,虽然通过,但是效率很低!!!
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def reverseKGroup(self, head, k):
"""
:type head: ListNode
:type k: int
:rtype: ListNode
"""
if k == 1:
return head
data = []
ptr = head
while ptr:
data.append(ptr.val)
ptr = ptr.next
length = len(data)
num = length // k
data1 = result = []
for i in range(num):
data1 = data[i*k : (i+1)*k]
data1 = data1[::-1]
result += data1
result += data[k*num:]
ptr2 = ListNode(0)
ptr3 = ptr2
for item in result:
ptr2.next = ListNode(item)
ptr2 = ptr2.next
return ptr3.next