首页 > 其他 > 详细

19. 删除链表的倒数第N个节点

时间:2019-07-17 09:42:29      阅读:78      评论:0      收藏:0      [点我收藏+]

技术分享图片

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
//因为要扫描一次即可,所以采用的是用一个数组保存每一个结点 ,然后用索引的方式进行查找对应的索引,再将结点进行组织
//注意的事项是 【1】 1 不用直接return null 而是需要用head.next 所以我自己写的方法有两个亮点
class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode T = head;
        LinkedList<ListNode> ls = new LinkedList<ListNode>();
        while(T!=null) {
            ls.add(T);
            T = T.next;
        }
        int length = ls.size();
        if(length == n)
            return head.next;
        ListNode temp = ls.get(length-n-1);
        temp.next = temp.next.next;
        return head;
    }
}

还用另外一种方法真的是巧妙

采取双重遍历肯定是可以解决问题的,但题目要求我们一次遍历解决问题,那我们的思路得发散一下。
我们可以设想假设设定了双指针 p 和 q 的话,当 q 指向末尾的 NULL,p 与 q 之间相隔的元素个数为 n 时,那么删除掉 p 的下一个指针就完成了要求。
设置虚拟节点 dummyHead 指向 head
设定双指针 p 和 q,初始都指向虚拟节点 dummyHead
移动 q,直到 p 与 q 之间相隔的元素个数为 n
同时移动 p 与 q,直到 q 指向的为 NULL
将 p 的下一个节点指向下下个节点

技术分享图片

解法多多 还望到对应的区域进行参考

19. 删除链表的倒数第N个节点

原文:https://www.cnblogs.com/cznczai/p/11198432.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!