Problem: 19. 删除链表的倒数第 N 个结点
思路
1、暴力循环
2、快慢指针
Code1
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode newHead = new ListNode(0);
newHead.next = head;
ListNode pre = newHead;
int size=0;
while (pre.next != null) {
pre = pre.next;
size++;
}
int i = size - n;
int count=0;
pre = newHead;
while (count != i) {
pre = pre.next;
count++;
}
pre.next = pre.next.next;
return newHead.next;
}
}
Code2
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode newHead = new ListNode(0);
newHead.next = head;
ListNode pre = newHead;
int size=0;
while (pre.next != null) {
pre = pre.next;
size++;
}
int i = size - n;
int count=0;
pre = newHead;
while (count != i) {
pre = pre.next;
count++;
}
pre.next = pre.next.next;
return newHead.next;
}
}