【LeetCode 19】删除链表的倒数第 N 个结点

很简单的题目。

	public static ListNode removeNthFromEnd(ListNode head, int n) {
    
    
		if (head != null && n > 0)
		{
    
    
			ListNode p1 = head, p2 = head, preP1 = p1;
			int nn = n-1;
			// 两个指针间隔为 n-1 个步长
			while (nn > 0)
			{
    
    
				p2 = p2.next;
				nn--;
			}
			// 第二个指针移动到最后一个位置
			// 删除p1位置
			while (p2.next != null)
			{
    
    
				preP1 = p1;
				p2 = p2.next;
				p1 = p1.next;
			}
			// 当删除的是头节点的时候,这两个值本身就相等
			if (preP1.next != p1.next)
			{
    
    
				preP1.next = p1.next;
				return head;
			}
			else 
				return head.next;
		}
		else 
			return null;
    }

猜你喜欢

转载自blog.csdn.net/juttajry/article/details/121748771