剑指 Offer 22.:链表中倒数第k个节点

解题思路

剑指 Offer 22.:链表中倒数第k个节点
该题关键在于找到链表中倒数第k个节点的位置,可以使用指针来锁定节点位置。
使用快慢指针,快指针与慢指针保持K个节点的距离,然后一同遍历到链表尾,那样快指针就到了原链表的尾部,快指针往前K-1个节点的位置就是新链表头节点的位置(即慢指针的下一个节点),所以,新链表的头部就是慢指针的下一个节点。

代码

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
   //快慢指针
	public static ListNode getKthFromEnd(ListNode head, int k) {
		 
		//快指针、慢指针,两指针保持K的距离,那样遍历到最后就可以找到新链表的头节点
		 ListNode fast = head , slow = head;
		 for(int i=0 ; i<k ; i++) {
			 fast = fast.next;
		 }
		 
		 //如果k等于链表的长度就直接返回原链表
		 if(fast == null) return head;
		 while(fast.next !=null) {
			 fast = fast.next;
			 slow = slow.next;
		 }
         return slow.next;
    }
}

image.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值