LeetCode11-删除链表中倒数n的节点

mac2025-02-03  31

解决思路:先循环链表,查看链表的长度,然后定义结果链表,每次循环中判断是否为倒数第n个,如果是,则直接将题目给链表的当前节点的下一个节点赋值给结果链表的next 然后break掉。(可参照求两个链表求和)

package com.example.demo; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @SpringBootTest public class deleteDescNumNode { @Test public void contextLoads() { /** * 题目 删除链表的倒数第N个节点 * 输入:(2 -> 4 -> 3 -> 9) n=2 * 输出:(2 -> 4 -> 9) */ ListNode l1 = new ListNode(1); ListNode l1_2 = new ListNode(2); ListNode l1_3 = new ListNode(3); ListNode l1_4 = new ListNode(4); ListNode l1_5 = new ListNode(5); // l1.next=l1_2; // l1_2.next=l1_3; // l1_3.next=l1_4; // l1_4.next=l1_5; ListNode result=removeNthFromEnd(l1,1); } /** * 第一个想法 * 执行用时 :1 ms, 在所有 java 提交中击败了76.71%的用户 * 内存消耗 :35.7 MB, 在所有 java 提交中击败了81.30%的用户 * @return */ public ListNode removeNthFromEnd(ListNode head,int n) { ListNode cur=head; int count=0; while (cur!=null){ count++; cur=cur.next; } ListNode result=new ListNode(0); ListNode results=result; for (int i = 0; i <count; i++) { //如果是倒数n个节点,则直接忽略已知链表的当前节点,并且将下一个节点赋值给结果链表 if(count-i==n){ results.next=head.next; break; }else{ // 类似 双链表求和 将已知链表的当前节点的值赋值给结果链表,然后将results的地址修改成results.next 这样就会对结果链表产生影响 results.next=new ListNode(head.val); results=results.next; } head=head.next; } return result.next; } }
最新回复(0)