题目地址:删除链表的倒数第 N 个结点
解题思路
1.最后要返回的头还是原来的那个头(绝大多数情况)
2.先让一个pre,初始为头,去遍历,得到这个链表一共有多长-count。这样才能去知道倒数第几个节点
while (pre != null) {
count++;
pre = pre.next;
}
3.这时如果进行一个判断,如果倒数n(要删的那个节点)为头,也就是 n == count,如果这个链表不是和示例二一样只有一个节点,那么就返回head.next。和示例二一样就返回null
if (count - n == 0) {
if (head.next != null) {
return head.next;
} else {
return null;
}
}
4.再定义一个cur,初始为头,让它到达要删除的地方。如果n!=1,也就是不是删除最后一个节点,就
cur.next = cur.next.next,否则就cur.next = null
ListNode cur = head;
for (int i = 1; i < count - n; i++) {
cur = cur.next;
}
完整代码
public static ListNode removeNthFromEnd(ListNode head, int n) {
ListNode pre = head;
int count = 0;
while (pre != null) {
count++;
pre = pre.next;
}
ListNode cur = head;
if (count - n == 0) {
if (head.next != null) {
return head.next;
} else {
return null;
}
}
for (int i = 1; i < count - n; i++) {
cur = cur.next;
}
if (n != 1) {
cur.next = cur.next.next;
} else {
cur.next = null;
}
return head;
}