文章最前: 我是Octopus,这个名字来源于我的中文名--章鱼;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github ;这博客是记录我学习的点点滴滴,如果您对 Python、Java、AI、算法有兴趣,可以关注我的动态,一起学习,共同进步。
相关文章:
- LeetCode:55. Jump Game(跳远比赛)
- Leetcode:300. Longest Increasing Subsequence(最大增长序列)
- LeetCode:560. Subarray Sum Equals K(找出数组中连续子串和等于k)
文章目录:
题目描述:
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
示例:
给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5.
说明:
给定的 n 保证是有效的。
java实现方式1:
/**
* 移除倒数第n数字
*
* @param head 头结点
* @param n 第n个数字
* @return 结果链表
*/
public ListNode removeNthFromEnd(ListNode head, int n) {
if (head == null || head.next == null) {
return null;
}
ListNode dummy = new ListNode(-1);
dummy.next = head;
ListNode p1 = dummy, p2 = dummy;
for (int i = 0; i < n; ++i) {
p2 = p2.next;
}
while (p2.next != null) {
p1 = p1.next;
p2 = p2.next;
}
p1.next = p1.next.next;
return dummy.next;
}
时间复杂度:O(n)
空间复杂度:O(1)
Python实现方式1:
def remove_nth_from_end(self, head: ListNode, n: int) -> ListNode:
'''
删除倒数第n个点
Args:
head: 头节点
n: 倒数n个数
Returns:
删除后的结果
'''
if head == None or head.next == None:
return None
dummy = ListNode(-1)
dummy.next = head
node1 = dummy
node2 = dummy
for i in range(n):
node2 = node2.next
while node2.next:
node1 = node1.next
node2 = node2.next
node1.next = node1.next.next
return dummy.next
时间复杂度:O(n)
空间复杂度:O(1)