交换链表中的节点

给你链表的头节点 head 和一个整数 k 。

交换 链表正数第 k 个节点和倒数第 k 个节点的值后,返回链表的头节点(链表 从 1 开始索引)。

示例 1:

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

输出:[1,4,3,2,5]

示例 2:

输入:head = [7,9,6,6,7,8,3,0,9,5], k = 5

输出:[7,9,6,6,8,7,3,0,9,5]

示例 3:

输入:head = [1], k = 1

输出:[1]

示例 4:

输入:head = [1,2], k = 1

输出:[2,1]

示例 5:

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

输出:[1,2,3]

提示:

链表中节点的数目是 n

1 <= k <= n <= 105

0 <= Node.val <= 100

python 复制代码
# 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]:
        n,s,f = head,head,head
        recode = 1
        while n:
            if recode < k:
                s = s.next
            if recode >k :
                f = f.next

            n = n.next
            recode +=1
        f.val,s.val = s.val,f.val
        return head
        

怎么能有这么聪明的解法,一次遍历 找到两个节点

膜拜大佬

相关推荐
乌萨奇也要立志学C++21 小时前
【洛谷】递归初阶 三道经典递归算法题(汉诺塔 / 占卜 DIY/FBI 树)详解
数据结构·c++·算法
鱼跃鹰飞1 天前
Leetcode1891:割绳子
数据结构·算法
无限进步_1 天前
【C语言&数据结构】对称二叉树:镜像世界的递归探索
c语言·开发语言·数据结构·c++·git·算法·visual studio
玖剹1 天前
队列+宽搜(bfs)
数据结构·c++·算法·leetcode·宽度优先
C++ 老炮儿的技术栈1 天前
什么是通信规约
开发语言·数据结构·c++·windows·算法·安全·链表
萧瑟其中~1 天前
二分算法模版——基础二分查找,左边界查找与右边界查找(Leetcode的二分查找、在排序数组中查找元素的第一个位置和最后一个位置)
数据结构·算法·leetcode
码农小韩1 天前
基于Linux的C++学习——动态数组容器vector
linux·c语言·开发语言·数据结构·c++·单片机·学习
想做后端的小C1 天前
408 数据结构:数据结构三要素——逻辑结构、物理(存储)结构和运算操作
数据结构
栈与堆1 天前
LeetCode-1-两数之和
java·数据结构·后端·python·算法·leetcode·rust