Java

来源:互联网 发布:学网络编程 编辑:程序博客网 时间:2024/06/06 09:37

给定一个链表,删除链表中倒数第n个节点,返回链表的头节点。


 注意事项

链表中的节点个数大于等于n

样例

给出链表1->2->3->4->5->null和 n = 2.

删除倒数第二个节点之后,这个链表将变成1->2->3->5->null.

挑战 

O(n)时间复杂度


/** * Definition for ListNode. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int val) { *         this.val = val; *         this.next = null; *     } * } */ public class Solution {    /**     * @param head: The first node of linked list.     * @param n: An integer.     * @return: The head of linked list.     */    ListNode removeNthFromEnd(ListNode head, int n) {        // write your code here             ListNode p=head;      ListNode q=head;        for(int i=0;i<n;i++){            p=p.next;        }        if(p==null){            head=head.next;            return head;        }        while(p.next!=null){            p=p.next;            q=q.next;        }        q.next=q.next.next;        return head;        }}
思路很简单,只有两种出现的情况,1、链表的长度刚刚好等于n,也就是说删除表头节点,2、链表长度大于n,那么我们先定义两个表头,一个后移n位,然后两个链表同时后移
,这时当后面的节点到达尾部时,前面的节点就是删除的节点的前一个节点。


原创粉丝点击