static SingleNode delBackNode(SingleNode targetNode,int n){
SingleNode designNode = targetNode;
SingleNode operationNode = targetNode;
//两种情况 第一种链表长度等于n,直接删除头节点,第二种链表长度小于n
//现将designNode索引后移n位,如果后移后的designNode头节点为null,则说明n等于链表长度删除头节点
for(int i = 0;i < n;i++){
designNode = designNode.next;
}
if(designNode == null){
targetNode = targetNode.next;
return targetNode;
}
//designNode、operationNode同时后移由于designNode已经后移过n位了,所以当designNode移到最后一位时operationNode的下一位即是要删除的节点,
while(designNode.next != null){
designNode = designNode.next;
operationNode = operationNode.next;
}
operationNode.next = operationNode.next.next;
return targetNode;
}
删除链表倒数第n个节点(O(n)时间复杂度)
最新推荐文章于 2022-05-12 08:11:35 发布
本文介绍了一种在单链表中删除特定位置节点的算法实现。通过一次遍历,利用两个指针designNode和operationNode,实现了在不预先知道链表长度的情况下,从链表中删除第n个节点。该算法巧妙地避免了二次遍历,提高了效率。
770

被折叠的 条评论
为什么被折叠?



