给你一个链表,删除链表的倒数第 n
个结点,并且返回链表的头结点。
直接就是先遍历链表计算长度len,然后在遍历找到第len-n+1个节点(要删除的前一个节点)
这个节点next指向他的next.next就可以了
时间复杂度o(n),空间复杂度o(1)
package TOP21_30;
import Util.ListNode;
//删除链表的倒数第 N 个结点
public class Top27 {
public static ListNode removeNthFromEnd(ListNode head, int n) {
if (head == null) {
return null;
}
ListNode rc = new ListNode(0, head);
int length = 0;
ListNode temp = head;
while (temp != null) {
length++;
temp = temp.next;
}
if(n>length){
return head;
}
ListNode tr = rc;
for (int i = 1; i < length - n + 1; i++) {
tr = tr.next;
}
tr.next = tr.next.next;
return rc.next;
}
public static void main(String[] args) {
int[] num = {1, 2, 3, 4, 5};
ListNode node = ListNode.setNodes(0, num);
ListNode res = removeNthFromEnd(node, 6);
ListNode.printListData(res);
}
}