日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode:Remove Nth Node From End of List 移除链表倒第n项

發布時間:2025/3/17 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode:Remove Nth Node From End of List 移除链表倒第n项 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

1、題目名稱

Remove Nth Node From End of List(移除鏈表中倒數第n項)

2、題目地址

https://leetcode.com/problems/remove-nth-node-from-end-of-list/

3、題目內容

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

中文:給出一個鏈表,刪去鏈表中的倒數第n項,返回鏈表首節點

例如:

給出鏈表:1->2->3->4->5,給出 n = 2,返回的鏈表為:1->2->3->5

4、解題方法1

刪去鏈表的倒數第n項,有兩種辦法,一是將鏈表翻轉,把正數第n項刪去,再將鏈表翻轉回去。

Java代碼如下:

/*** 功能說明:LeetCode 19 - Remove Nth Node From End* 開發人員:Tsybius2014* 開發時間:2015年8月6日*/ public class Solution {/*** 刪除鏈表中倒數第N項(從1開始計數)* @param head 鏈表首節點* @param n 正整數* @return 刪除后鏈表首節點*/public ListNode removeNthFromEnd(ListNode head, int n) {if (head == null || n <= 0) {return head;}head = reverseList(head);head = removeNthFromBegin(head, n);head = reverseList(head);return head;}/*** 刪除鏈表中倒數第N項(從1開始計數)* @param head 鏈表首節點* @param n 正整數* @return 刪除后鏈表首節點*/private ListNode removeNthFromBegin(ListNode head, int n) {if (head == null || n <= 0) {return head;}System.out.println("REMOVE NTH LIST NODE: " + n);if (n == 1) {return head.next;}ListNode nodeI = head;ListNode nodeJ = head.next;n--;while (--n != 0) {nodeI = nodeI.next;nodeJ = nodeJ.next;if (nodeJ == null) {return head;}}nodeI.next = nodeJ.next;return head;}/*** 翻轉鏈表* @param head 翻轉前鏈表首節點* @return 翻轉后鏈表首節點*/private ListNode reverseList(ListNode head) {if (head == null || head.next == null) {return head;}System.out.println("REVERSE LIST");ListNode nodeReverseHead = null;ListNode nodeTemp;ListNode nodeI = head;while (nodeI != null) {nodeTemp = new ListNode(nodeI.val);nodeTemp.next = nodeReverseHead;nodeReverseHead = nodeTemp;nodeI = nodeI.next;}return nodeReverseHead;} }

6、解題方法2

比解題方法1更簡單的方法是,先遍歷一次鏈表獲取鏈表長度len,第二次遍歷時遍歷到第len-n項時就可以進行跳過。

Java代碼如下:

/*** 功能說明:LeetCode 19 - Remove Nth Node From End* 開發人員:Tsybius2014* 開發時間:2015年8月6日*/ public class Solution {/*** 刪除鏈表中倒數第N項(從1開始計數)* @param head 鏈表首節點* @param n 正整數* @return 刪除后鏈表首節點*/public ListNode removeNthFromEnd(ListNode head, int n) {if (head == null || n <= 0) {return head;}//獲取鏈表總長度int len = 0;ListNode nodeTemp = head;while (nodeTemp != null) {nodeTemp = nodeTemp.next;len++;}//刪去倒數第N個點if (len < n) {return head;} else if (len == n) {return head.next;} else {int counter = len - n;nodeTemp = head;while (--counter != 0) {nodeTemp = nodeTemp.next;}nodeTemp.next = nodeTemp.next.next;}return head;} }

END

轉載于:https://my.oschina.net/Tsybius2014/blog/488871

總結

以上是生活随笔為你收集整理的LeetCode:Remove Nth Node From End of List 移除链表倒第n项的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。