删除单链表中倒数第 k 个节点
思路 1 :两个指针 p1 ,p2 ,p1从头开始遍历,当 p1 到达第 k 个节点时,p2 开始; 当 P1 到达链表的最后一个节点时,p2 所指的节点则为链表中倒数第 k 个节点。 public class Node{ public int data; public Node next; public Node(int data){ this.data = data; } public Node removeLastKNode(Node head,int k){ if(head == null || k < 1){ return head; } Node p1 = head; Node p2 = head; int num = 1; while(p1.next != null && num < k){ ++num; p1 = p1.next; } while(p1.next != null){ p1 = p1.next; p2 = p2.next; } p2.next = p2.next.next; return head; } } 思路 2:时间复杂度 O(n) ,空间复杂度 O(1)。 1>若链表为空或 K < 1,直接返回; 2>链表从头走到尾,每移动一步,k 值减 1 ; 3>若 k > 0,则没有倒数第 k 个节点,返整个链表; 若 k = 0,则头结点为倒数第 k