题目链接:删除链表的倒数第 N 个结点
题目
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
示例 1:
输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]示例 2:
输入:head = [1], n = 1
输出:[]示例 3:
输入:head = [1,2], n = 1
输出:[1]
解题
读完题目首先想到得方法是两次遍历,第一次取得长度,第二次遍历到到数第$n$个节点的前一个节点,删除第$n$个节点。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
int l = 0, j = 0;
ListNode p = head;
while(p != null) {
p = p.next;
l++;
}
if(l == 1) return null;
if(l == n) return head.next;
p = head;
while(j < l - n - 1) {
p = p.next;
j++;
}
p.next = p.next.next; // 直接跳过被删除节点,实际开发记得要释放删除的节点,防止内存泄漏
return head;
}
}
时间复杂度:$O(2n-k)$,$k$表示倒数第$k$个元素
Comments | NOTHING