删除链表的倒数第N个节点---2022/02/22

题目描述:
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。

题目来源

JAVA实现如下:

package czz;

/*
 * 日期:2022.02.22
 * 作者:城主
 * 题目:给定一个链表删除倒数第n个节点并返回头节点
 * 思考:由于java和C还是有所区别,少了指针的概念,那么在
 *       java中使用何种结构来表示C语言中的指针概念?
 *       
 *       清楚了节点之间的连接关系,由于是倒数第n个节点,所以,
 *       首先定位到第len-n个位置的节点,直接做删除处理。
 *
 * 收获:
 *      1、java中如何创建链表,在节点类中添加add的方法。
 */
 class ListNode {
    int val;
     ListNode next;
     ListNode() {}
     ListNode(int val) { this.val = val; }
     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
     
   //添加结点
 	public void add(int newdata){
 		ListNode newNode = new ListNode(newdata);    //创建一个结点
 		if(this.next == null){
 			this.next  = newNode;
 		}
 		else{
 			this.next.add(newdata);
 		}
 	}

 }
 
public class DeleteNode_0222 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		int[] str= {1,2,3,4,5};
		int n=2;
		ListNode head=new ListNode(1,null);
		for(int i=1;i<str.length;i++) {
			head.add(str[i]);
		}

	}
	
	 public static ListNode removeNthFromEnd(ListNode head, int n) {
		 /*
		  * 定义快慢指针,快指针先走N步,如果走到末端说明去除头一个节点
		  * 此时直接做返回。否则,快指针继续走到末端,然后慢指针走到待删
		  * 除节点的前一个节点。而后直接做删除处理。
		  */
		 ListNode fast=head;
		 ListNode slow=head;
		 
		 while(n--!=0)
		 {
			fast=fast.next;
		 }
		 if(fast==null)
		 {
			 return head.next;
		 }
         fast=fast.next;
		 while(fast!=null)
		 {
			 fast=fast.next;
			 slow=slow.next;
		 }
		 slow.next=slow.next.next;
		 return head;

	    }

}

性能评估如下:
删除链表的倒数第N个节点---2022/02/22
以内存换取时间。

上一篇:[渝粤教育] 广东-国家-开放大学 10180k2_统计基础_21秋考试


下一篇:尝试gh,微软收购GitHub后推出的新CLI