题意:只知道头节点head,删除倒数第n个结点
- 需要找到删除结点的前一结点,可以设置两个结点left、right都指向head,
- 把要从尾结点向前移n位至倒数第n个结点的前一位,转换成rigth从头节点向后移n位,
- 再left和right同时向后移动,那么当right是尾结点时,left则是删除结点的前一位
package p3.链式结构;
//只知道头节点head,删除倒数第n个结点
/*
需要找到删除结点的前一结点,可以设置两个结点left、right都指向head,
把要从尾结点向前移n位至倒数第n个结点的前一位,转换成rigth从头节点向后移n位,
再left和right同时向后移动,那么当right是尾结点时,left则是删除结点的前一位
*/
public class Solution19 {
public ListNode removeNthFromEnd(ListNode head, int n) {
//如果没有或只有一个元素则直接返回
if (head == null || head.next == null) {
return null;
}
ListNode right = head;
ListNode left = head;
for (int i = 0; i < n; i++) {
right = right.next;
}
if (right == null) { //则说明head就是倒数第n位
return head.next;
}
while (right.next != null) {
right = right.next;
left = left.next;
}
ListNode del = left.next;
left.next = del.next;
del.next = null;
return head;
}
}