19.删除链表的倒数第普通个节点
两次遍历
解决方案类{
公共列表节点removentFromend(列表节点头,int n){ 0
/**
* 两次遍历
* 先得到链表的长度,再正向遍历到长度n的位置,也就是待删除节点的前一个节点
*/
ListNode DummyHead=new ListNode(0,head);
ListNode cur=dummyHead.next
(同Internationalorganizations)国际组织长度=0;
while (cur!=null){ 0
长度;
cur=cur.next
}
ListNode prev=dummyHead
for(int I=0;我长度-n;I){ 0
prev=prev.next
}
prev。next=prev。下一个。接下来;
返回dummyHead .下一个
}
}
/**
* 时间复杂度O(n)
* 空间复杂度O(1)
*/
双指针
解决方案类{
公共列表节点removentFromend(列表节点头,int n){ 0
/**
* 一次遍历(双指针)
*对先右移,当两个指针的区间长度为n时,再一起移动,直到right==null,此时左边的指向为待删除节点
*/
ListNode DummyHead=new ListNode(0,head);
ListNode left=dummyHead
ListNode right=dummyHead.next
for(int I=0;I n;I){ 0
右=右。下一个
}
而(对!=null){ 0
左=左。下一个
右=右。下一个
}
向左。下一个=向左。下一个。接下来;
返回dummyHead .下一个
}
}
/**
* 时间复杂度O(n)
* 空间复杂度O(1)
*/
https://leet代码-cn。com/problems/remove-n-node-from-end-list/
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/153035.html