题解 | #删除链表的倒数第n个节点#

删除链表的倒数第n个节点

http://www.nowcoder.com/practice/f95dcdafbde44b22a6d741baf71653f6

解题思路:
先找出要删除元素位置的正序,再设置双指针,注意分成三类情况讨论:

1. 要删除的元素在链表第一个
2. 要删除的元素在链表最后
3. 要删除的元素在链表中间

代码展示:

public class Solution {
    /**
     * 
     * @param head ListNode类 
     * @param n int整型 
     * @return ListNode类
     */
    public ListNode removeNthFromEnd (ListNode head, int n) {
        // write code here
        if (head==null)    //特殊情况
            return head;
        ListNode p1 = head;
        int l = 0;
        while (p1!=null) {
            l++;
            p1 = p1.next;
        }
        l -= n;    //找出位置的正序
        if (l==0)    //要删除的元素在链表第一个
            return head.next;
        else {
            ListNode p2 = head;    //设置双指针
            for (int i = 0; i<l-1; i++)
                p2 = p2.next;
            ListNode p3 = p2.next.next;
            if (p3==null)    //要删除的元素在链表最后
                p2.next = null;
            else    //要删除的元素在链表中间
                p2.next = p3;
            return head;
        }
    }
}
全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务