leetcode1721. 交换链表中的节点

举报
兔老大 发表于 2021/04/30 03:13:20 2021/04/30
【摘要】 给你链表的头节点 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,...

给你链表的头节点 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

思路:两个指针找到以后交换值即可。


  
  1. /**
  2. * Definition for singly-linked list.
  3. * public class ListNode {
  4. * int val;
  5. * ListNode next;
  6. * ListNode() {}
  7. * ListNode(int val) { this.val = val; }
  8. * ListNode(int val, ListNode next) { this.val = val; this.next = next; }
  9. * }
  10. */
  11. class Solution {
  12. public ListNode swapNodes(ListNode head, int k) {
  13. ListNode cur = head;
  14. ListNode first = head;
  15. ListNode last = head;
  16. int count = 1;
  17. while (cur.next != null) {
  18. // 找到正数第k个节点
  19. if (count < k) {
  20. first = first.next;
  21. // 找到倒数第k个节点
  22. } else {
  23. last = last.next;
  24. }
  25. count++;
  26. cur = cur.next;
  27. }
  28. // 交换正数第k个节点和倒数第k个节点的值
  29. count = first.val;
  30. first.val = last.val;
  31. last.val = count;
  32. return head;
  33. }
  34. }

 

文章来源: fantianzuo.blog.csdn.net,作者:兔老大RabbitMQ,版权归原作者所有,如需转载,请联系作者。

原文链接:fantianzuo.blog.csdn.net/article/details/114490500

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。