// 方法一: 数有多少个节点,得到正着数的编号,共需两遍遍历
// 方法二: 双指针,first先走N步,然后second随着first一起走,知道first走到末尾,
// 删掉second后面的节点即可,只需一遍遍历
class Solution {
// 方法一
public ListNode removeNthFromEnd(ListNode head, int n) {
if (head == null)
return new ListNode(1); // 防止为空,但应该没有这样的样例
if (n == 0)
return head;
int length = 0;
ListNode p = head;
while (p != null) {
p = p.next;
length++;
}
if (n > length)
return head;
if (n == length)
return head.next;
p = head;
length = length - n;
while (length > 1) {
p = p.next;
length--;
}
if (n == 1) {
p.next = null;
return head;
}
p.next = p.next.next;
return head;
}
// 方法二
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode first = head;
ListNode second = head;
for (int i = 0; i < n; i++)
first = first.next;
if (first == null)
return head.next;
while (first.next != null) {
first = first.next;
second = second.next;
}
second.next = second.next.next;
return head;
}
}
LeetCode 19 删除链表倒数第N个节点
猜你喜欢
转载自blog.csdn.net/TIMELIMITE/article/details/89364496
今日推荐
周排行