题目描述
给你一个链表,删除链表的倒数第
n
个结点,并且返回链表的头结点。
示例
输入: 1->2->3->4->5 和 k = 2 输出: 4
做题思路
解题思路参照删除链表的倒数第N个结点(中等)_黑黑藏不住的博客-CSDN博客
设置快慢指针,让快指针先走k步(先考虑是否走到了空,若走到了空就证明需要返回的是首元素对应的值),然后再让快慢指针同时右移,快指针永远比慢指针多走k步,当快指针指向null时,慢指针指向的就是倒数第k个元素。
代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public int kthToLast(ListNode head, int k) {
//设置快慢指针
ListNode slow=head;
ListNode fast=head;
//让快指针先走k步
while(k>0){
fast=fast.next;
k--;
}
//若走完k步快指针指向null则证明需要返回头节点所对应的值
if(fast==null){
return head.val;
}
//快慢指针同时后移,快指针为空时截止
while(fast!=null){
slow=slow.next;
fast=fast.next;
}
//此时满指针指向的元素就是要返回的倒数第k个元素
return slow.val;
}
}