力扣1721.交换链表中的结点(中)
Posted 小布丁value
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了力扣1721.交换链表中的结点(中)相关的知识,希望对你有一定的参考价值。
声明三个节点cur、first、last全部指向head节点
利用cur从头结点开始遍历链表,
first指针移动k - 1步后定位至该链表正数第k个节点,
设链表的节点个数为nums,当first指针指向第k个节点时,
此时链表还有nums - k个节点没有遍历。
因为链表的头节点到倒数第k个节点之间的节点个数刚好也是nums - k个,
所以当遍历到正数第k个节点后,
last指针开始从head节点移动nums - k步后即指向了倒数第k个节点。
class Solution {
public ListNode swapNodes(ListNode head, int k) {
// 模拟指针,用来遍历链表
ListNode cur = head;
// 用来定位正数第k个节点
ListNode first = head;
// 用来定位倒数第k个节点
ListNode last = head;
// 用于节点的计数,和节点值的交换
int count = 1;
while (cur.next != null) {
// 找到正数第k个节点
if (count < k) {
first = first.next;
// 找到倒数第k个节点
} else {
last = last.next;
}
count++;
cur = cur.next;
}
// 交换正数第k个节点和倒数第k个节点的值
count = first.val;
first.val = last.val;
last.val = count;
return head;
}
}
以上是关于力扣1721.交换链表中的结点(中)的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode Algorithm 1721. 交换链表中的节点
LeetCode Algorithm 1721. 交换链表中的节点