leetcode: Remove Nth Node From End of List

很简单的一道题,用两个指针遍历一遍链表。利用count保证两个指针间的距离为n,即当前一指针遍历完链表后,后一指针恰巧在倒数第n+1个位置上。这里需要考虑两种情况:

1. 若链表长即为n,那么后一指针为null,返回的应该是head.next(倒数第n个是head)

2. 否则,将后一指针的next赋为后一指针next.next(即跳过倒数第n个,将其从链表中删除),返回此时的head


/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode t1 = head;
        ListNode tn = null;
        int count=0;
        while( t1!=null )
        {
            if( count == n )
            {
                tn = head;
            }
            else if( count > n )
            {
                tn = tn.next;
            }
            t1 = t1.next;
            count++;
        }
        if( tn == null )
        {
            return head.next;
        }
        tn.next = tn.next.next;
        return head;
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值