牛客网的题目描述如下:
输入一个链表,输出该链表中倒数第k个结点。
public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
if (head == null) {
return null;
}
if (k <= 0) {
return null;
}
ListNode fast = head;
ListNode slow = head;
while(k - 1 > 0) {
if (fast.next != null) {
fast = fast.next;
k--;
} else {
return null;
}
}
while(fast.next != null) {
fast = fast.next;
slow = slow.next;
}
return slow;
}
}
力扣网的题目描述如下:
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
int len = size(head);
if(head == null || head.next == null || n < 0 || n > len) {
return null;
}
ListNode prev = null;
ListNode cur = head;
int offSet = len - n;
for (int i = 0;i < offSet;i++) {
prev = cur;
cur = cur.next;
}
if (n == len) {
return head.next;
}
prev.next = cur.next;
return head;
}
public int size(ListNode head) {
int count = 0;
for (ListNode cur = head;cur != null;cur = cur.next) {
count++;
}
return count;
}
}
两道题目归根结底都是要找到倒数第K个节点。