笨办法,设置一个valuelist,记录全部的值和正数、倒数第K个值,然后做好记录;设置新的头节点,其next节点指向head。同时设置counter记录走了多少步了,当步数与k一样时,换值为倒数k的值,当步数与倒数K值的正数index数字一样时,换值为K位置的值。
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def swapNodes(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:
tail = head
valulist = []
while tail.next:
valulist.append(tail.val)
tail = tail.next
valulist.append(tail.val)
indexoftailK = len(valulist) - k
value_k = valulist[k-1]
value_tail_k = valulist[indexoftailK]
counter = 0
nonehead = ListNode(-1)
nonehead.next = head
pointer = nonehead
while pointer:
if counter == k:
pointer.val = value_tail_k
elif counter == indexoftailK+1:
pointer.val = value_k
counter += 1
pointer = pointer.next
return nonehead.next