leetcodeday25 — K 个一组翻转链表

给你一个链表,每 个节点一组进行翻转,请你返回翻转后的链表。

是一个正整数,它的值小于或等于链表的长度。

如果节点总数不是 的整数倍,那么请将最后剩余的节点保持原有顺序。

示例 1:

输入:head = [1,2,3,4,5], k = 2
输出:[2,1,4,3,5]

法 一:只交换值

# [25] K 个一组翻转链表
#
#法1 :只交换值
# @lc code=start
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next


class Solution:
    def reverseKGroup(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:
        head1=head
        fhead= ListNode(0,head)
        head2=fhead
        end=0
        while head1!= None:
            nums=list()
            for i in range(k):
                head2=head2.next
                if head2==None:
                    end=1
                    break 
                #print(head2.val)   
                nums.append(head2.val)
            if end==0:
                for i in range(k):
                    head1.val=nums[k-1-i]
                    head1=head1.next
            else:
                for i in range(len(nums)):
                    head1.val=nums[i]
                    head1=head1.next
        return  fhead.next   
# @lc code=end

进阶:

  • 你可以设计一个只使用常数额外空间的算法来解决此问题吗?
  • 你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。

法二:节点交换(不只是单纯改变值) 代做。。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注