此题让删除链表中的倒数第K个元素,思路如下
双指针法,找到链表中要删除的前一个元素,删除即可
边界条件的判断很重要!怎么执行也很重要
如果n太大,返回head,如果n是第一个元素,返回head.next
代码如下 public ListNode removeNthFromEnd(ListNode head, int n) {
if(head==null||n<0)
return head;
ListNode runner1 = head;
ListNode runner2 = head;
for(int i=0; i<n; i++) {
runner1=runner1.next;
if(runner1==null&&i<n-1)
return head;
else if(runner1==null)
return head.next;
}
while(runner1.next!=null) {
runner1=runner1.next;
runner2=runner2.next;
}
runner2.next=runner2.next.next;
return head;
}
如果上题改为找出链表的倒数第N个元素,上面代码应该如何改动?
public static Node findKth(Node head, int n) {
if (n <= 0 || head == null)
return null;
Node runnner1 = head;
Node runnner2 = head;
for (int i = 0; i < n - 1; i++) {
runnner2 = runnner2.next;
if (runnner2 == null)
return null;
}
while (runnner2.next != null) {
runnner1 = runnner1.next;
runnner2 = runnner2.next;
}
return runnner1;
}