【算法】删除单链表的倒数第N个结点
2017-03-13 09:50
411 查看
Description
Given a linked list, remove the nth node from the end of list and return its head. *For example, * Given linked list: 1->2->3->4->5, and n = 2. * After removing the second node from the end, * the linked list becomes 1->2->3->5. *Note: * Given n will always be valid. * Try to do this in one pass.
这是Leetcode中的一道题,剑指offer中是查找到单链表的倒数第N个结点,题目类似。
解题思路
采用两个指针,first和slow,first先后移N个结点,然后slow和first同时向后移动,因为两个指针相差N个结点,所以当first.next==null,slow现在指的就是倒数第N个结点的前驱,所以直接利用slow.next = slow.next.next,删除这个节点。代码如下:
/** * @ congrisheng * @ 2017-3-13 * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ public ListNode removeNthFromEnd(ListNode head, int n){ if(head == null || head.next == null){ return null; } ListNode slow = head; ListNode first = head; for(int i = 0; i < n; i++){ first = first.next; } if(fast == null){ head = head.next; return head; } while(first.next != null){ slow = slow.next; first = first.next; } slow.next = slow.next.next; return slow; }
From《剑指offer》Page13
相关文章推荐
- [算法]在单链表和双链表中删除倒数第k个结点
- LeetCode 19. Remove Nth Node From End of List(删除单链表倒数第N个结点)
- Remove Nth Node From End of List 删除链表的倒数第n个结点
- 删除单链表的倒数第k个结点
- 数据结构——寻找单链表倒数第n个结点
- 【LeetCode-面试算法经典-Java实现】【019-Remove Nth Node From End of List(移除单链表的倒数第N个节点)】
- cc150:实现一个算法来删除单链表中间的一个结点,只给出指向那个结点的指针
- 删除单链表的倒数第N个节点
- cc150:实现一个算法来删除单链表中间的一个结点,仅仅给出指向那个结点的指针
- 给定单链表的头结点,如何快速的找到倒数的第n个节点?
- 结构之美:获取单链表倒数第N个结点值
- [算法浅析] 如何在O(1)的时间里删除单链表的结点
- 【Java】实现一个算法,找出一个单链表中倒数第K个结点
- 删除链表的倒数第n个结点 Remove Nth Node From End of List
- Chapter 2 | Linked Lists--返回单链表倒数第n个元素及删除中间的某个节点
- 给定单链表的头结点,如何快速的找到倒数的第n个节点?
- 008实现一个算法从一个单链表中返回倒数第n个元素(keep it up)
- 2.2 实现一个算法从一个单链表中返回倒数第n个元素
- (算法)输出单链表的倒数第k个节点,删除特点的节点和从链表尾一次输出节点值
- 删除单链表中的倒数第n个节点的实现及测试程序