Remove Nth Node From End of List

简介: 题目: Given a linked list, remove the nth node from the end of list and return its head. For example, Given linked list: 1->2->3->4->5, and n = 2.

题目:

Given a linked list, remove the nth node from the end of list and return its head.

For example,

  Given linked list: 1->2->3->4->5, and n = 2.

  After removing the second node from the end, the linked list becomes 1->2->3->5.

Note:
  Given n will always be valid.
  Try to do this in one pass.

 

  

 

主要思想:

首先,为链表添加头指针,添加一个头指针fakeHead,fakeHead.next=head,然后head=fakeHead。结果如下图所示:

 

然后,创建一个走的快的指针fast,指向head.next。结果如下图所示:

 

此时,我们以n=2为例,说明运行过程。让fast指针往前走n=2个节点。结果如下图所示:

最后,让head和fast指针一起往前走,当fast指针走到最后时,head指针后面还有n个节点未走完。结果如下图所示:

此时,head.next就是倒数第n=2个节点。

 

java代码如下

public class RemoveNthNodeFromEndofList {
	public static void main(String[] args) {
		ListNode ln1= new ListNode(1);
		ListNode ln2= new ListNode(2);
		ln1.next=ln2;
		ln2.next=null;
		System.out.println(removeNthFromEnd(ln1,1).toString());
	}
	public static ListNode removeNthFromEnd(ListNode head, int n) {
		ListNode fakeHead= new ListNode(-1);//创建一个虚拟的头结点
		fakeHead.next = head;
		head=fakeHead;//为head添加头节点
		/**
		 * 创建一个走的快的指针,比head指针快n个节点
		 * */
		ListNode fast=head;
		for(int i=0;i<n;i++)
		{
			if(fast.next!=null)
			{
				fast=fast.next;
			}
		}
		/**
		 * 让fast节点和head节点一起走
		 * fast结束时,head离结束还有n个节点
		 * 此时head.next就是倒数第n个节点
		 * */
		while(fast.next!=null)
		{
			fast=fast.next;
			head=head.next;
		}
		head.next=head.next.next;
		return fakeHead.next; 
    }
}
/**
 * Definition for singly-linked list.
 */
class ListNode {
	int val;
	ListNode next;
	ListNode(int x) {
		val = x;
	}
	@Override
	public String toString() {
		return "ListNode [val=" + val + "]";
	}
	
}

  

目录
相关文章
|
JavaScript
DOM 节点列表长度(Node List Length)
`length`属性用于获取DOM节点列表的长度,即节点数量。通过遍历这个属性,可以访问和处理所有节点。例如,示例代码加载&quot;books.xml&quot;,获取所有&quot;title&quot;节点,并依次输出它们的第一个子节点的值。
|
JavaScript
DOM 节点列表长度(Node List Length)
`length`属性用于获取DOM节点列表的元素数量。在示例中,代码加载&quot;books.xml&quot;,然后通过`getElementsByTagName(&quot;title&quot;)`获取所有标题节点。使用`for`循环遍历这些节点,输出每个标题的文本内容。
|
XML JavaScript 数据格式
DOM 节点列表长度(Node List Length)
`length`属性表示DOM节点列表的长度。在示例中,通过加载&quot;books.xml&quot;到`xmlDoc`,并使用`getElementsByTagName(&quot;title&quot;)`获取所有标题节点,然后利用`for`循环遍历整个节点列表,每次迭代通过`childNodes[0].nodeValue`访问每个节点的第一个子节点的值并输出。此方法可用于处理XML或HTML文档中的节点列表。 **Markdown格式:** `length`属性表示DOM节点列表的长度。
|
JavaScript
DOM 节点列表长度(Node List Length)
`length`属性定义了节点列表的长度(即节点数量)。可通过此属性遍历节点列表。
|
JavaScript
DOM 节点列表长度(Node List Length)
`length`属性用于获取DOM节点列表的元素数量。通过遍历这个属性,如`for (i=0; i&lt;x.length; i++)`,可以访问和处理每个节点。在示例中,加载&quot;books.xml&quot;,然后获取所有&quot;&lt;title&gt;&quot;标签,并输出它们的子节点值。
|
JavaScript
DOM 节点列表长度(Node List Length)
`length`属性用于获取DOM节点列表的元素数量。在示例中,代码加载&quot;books.xml&quot;,然后通过`getElementsByTagName(&quot;title&quot;)`获取所有标题节点。使用`for`循环遍历这些节点,输出每个标题的文本内容。
|
JavaScript
DOM 节点列表长度(Node List Length)
`length`属性用于获取DOM节点列表的元素数量。在示例中,代码加载&quot;books.xml&quot;,然后通过`getElementsByTagName(&quot;title&quot;)`获取所有标题节点。使用`for`循环遍历这些节点,输出每个标题的文本内容。
|
安全 Java
java线程之List集合并发安全问题及解决方案
java线程之List集合并发安全问题及解决方案
1646 1
|
运维 关系型数据库 Java
PolarDB产品使用问题之使用List或Range分区表时,Java代码是否需要进行改动
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
Java API Apache
怎么在在 Java 中对List进行分区
本文介绍了如何将列表拆分为给定大小的子列表。尽管标准Java集合API未直接支持此功能,但Guava和Apache Commons Collections提供了相关API。
520 1

热门文章

最新文章