/** * 给定一个链表,删除链表的倒数第n个节点并返回链表的头指针 * 例如, * 给出的链表为:1->2->3->4->5, n= 2. * 删除了链表的倒数第n个节点之后,链表变为1->2->3->5. * 备注: * 题目保证n一定是有效的 * 请给出请给出时间复杂度为\ O(n) O(n)的算法 * * 核心思路:(双指针) * 定义两个指针,刚开始分别指向头结点,然后先让一个指针先走n-1步,接着两个指针同时遍历链表, * 当第一个指针到达链表尾部的时候, * 第二个指针指向的就是要删除的倒数第n个结点。 * */ public class NC53 { /** * * @param head ListNode类 * @param n int整型 * @return ListNode类 */ public ListNode removeNthFromEnd (ListNode head, int n) { if(head == null){ return null; } //快指针 ListNode fast = head; //慢指针 ListNode slow = head; //快指针先走 int count = n; while(fast!=null && count>0){ fast = fast.next; --count; } //链表只有一个节点返回null; if(n==1&&fast==null){ return null;
每日算法--删除链表的倒数第n个节点并返回链表的头指针
最新推荐文章于 2023-03-30 12:46:08 发布
该博客介绍了如何在O(n)的时间复杂度内删除链表的倒数第n个节点。通过设置两个指针,一个先走n-1步,然后两个指针同步移动,当先走的指针到达链表尾部时,另一个指针所指节点即为待删除节点,然后更新前一个节点的next指向即可。
摘要由CSDN通过智能技术生成