给你一个链表,删除链表的倒数第 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);}
}
harryptter / LeetcodeTop100 · GitCode