给你一个链表,删除链表的倒数第 n
个结点,并且返回链表的头结点。
思路:
计算链表长度num,num - n就是需要删去结点的索引
其中若删去第一个结点,返回head.next;
/*** Definition for singly-linked list.* public class ListNode {* public int val;* public ListNode next;* public ListNode(int val=0, ListNode next=null) {* this.val = val;* this.next = next;* }* }*/
public class Solution {public ListNode RemoveNthFromEnd(ListNode head, int n) {int num = 0;ListNode temp = head;while(temp != null){num++;temp = temp.next;}int index = num - n;if(index == 0)//第一个结点return head.next;temp = head;for(int i = 1; i < index; i++)temp = temp.next;temp.next = temp.next.next;return head;}
}
复杂度分析
-
时间复杂度:O(sz),其中 sz 是链表的长度。最多需要遍历链表两次,删除结点的时间为 O(1)。
-
空间复杂度:O(1)。