写点什么

【LeetCode】交换链表中的节点 Java 题解

作者:HQ数字卡
  • 2022 年 5 月 22 日
  • 本文字数:834 字

    阅读完需:约 3 分钟

题目描述

给你链表的头节点 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]
来源:力扣(LeetCode)链接:https://leetcode.cn/problems/swapping-nodes-in-a-linked-list著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
复制代码

思路分析

  • 今天的算法题目是链表处理题目,题目要求交换 链表正数第 k 个节点和倒数第 k 个节点的值后。我们可以分别遍历链表,找到第 k 个节点和倒数第 k 个节点。然后连接起来,就可以得到答案。实现代码如下:

通过代码

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode() {} *     ListNode(int val) { this.val = val; } *     ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */class Solution {    public ListNode swapNodes(ListNode head, int k) {        int n = 0;        ListNode temp = head;        while (temp != null) {            n++;            temp = temp.next;        }        ListNode node1 = head, node2 = head;        for (int i = 1; i < k; i++) {            node1 = node1.next;        }        for (int i = 1; i < n - k + 1; i++) {            node2 = node2.next;        }        int val1 = node1.val, val2 = node2.val;        node1.val = val2;        node2.val = val1;        return head;
}}
复制代码

总结

  • 上述算法的时间复杂度是 O(n),空间复杂度是 O(n)

  • 坚持算法每日一题,加油!

发布于: 刚刚阅读数: 2
用户头像

HQ数字卡

关注

还未添加个人签名 2019.09.29 加入

LeetCode,略懂后端的RD

评论

发布
暂无评论
【LeetCode】交换链表中的节点Java题解_LeetCode_HQ数字卡_InfoQ写作社区