删除链表倒数第K个结点
删除链表的倒数第n个节点
http://www.nowcoder.com/questionTerminal/f95dcdafbde44b22a6d741baf71653f6
解法
可以通过快指针先走K步 慢指针先指向head,导致 快指针和慢指针相差K个结点,然后快指针移到末尾 这个时候慢指针就是倒数第K个结点了。
然后在遍历的时候 记录下慢指针的前一个结点,用来删除就OK了。
思路
import java.util.*; /* * public class ListNode { * int val; * ListNode next = null; * } */ public class Solution { /** * * @param head ListNode类 * @param n int整型 * @return ListNode类 */ public ListNode removeNthFromEnd (ListNode head, int n) { // write code here if(head == null){ return null; } ListNode p = head; ListNode q = head; ListNode pre = null; while(n>0){ if(p!=null){ p = p.next; }else{ return null; } n--; } if(p==null){ return head.next; } while(p != null){ p = p.next; pre = q ; q = q.next; if(p ==null){ pre.next = q.next; } } return head; } }