LeetCode:Remove Nth Node From End of List 移除链表倒第n项
生活随笔
收集整理的這篇文章主要介紹了
LeetCode:Remove Nth Node From End of List 移除链表倒第n项
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
2019獨角獸企業(yè)重金招聘Python工程師標準>>>
1、題目名稱
Remove Nth Node From End of List(移除鏈表中倒數(shù)第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.
中文:給出一個鏈表,刪去鏈表中的倒數(shù)第n項,返回鏈表首節(jié)點
例如:
給出鏈表:1->2->3->4->5,給出 n = 2,返回的鏈表為:1->2->3->5
4、解題方法1
刪去鏈表的倒數(shù)第n項,有兩種辦法,一是將鏈表翻轉,把正數(shù)第n項刪去,再將鏈表翻轉回去。
Java代碼如下:
/*** 功能說明:LeetCode 19 - Remove Nth Node From End* 開發(fā)人員:Tsybius2014* 開發(fā)時間:2015年8月6日*/ public class Solution {/*** 刪除鏈表中倒數(shù)第N項(從1開始計數(shù))* @param head 鏈表首節(jié)點* @param n 正整數(shù)* @return 刪除后鏈表首節(jié)點*/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;}/*** 刪除鏈表中倒數(shù)第N項(從1開始計數(shù))* @param head 鏈表首節(jié)點* @param n 正整數(shù)* @return 刪除后鏈表首節(jié)點*/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 翻轉前鏈表首節(jié)點* @return 翻轉后鏈表首節(jié)點*/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* 開發(fā)人員:Tsybius2014* 開發(fā)時間:2015年8月6日*/ public class Solution {/*** 刪除鏈表中倒數(shù)第N項(從1開始計數(shù))* @param head 鏈表首節(jié)點* @param n 正整數(shù)* @return 刪除后鏈表首節(jié)點*/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++;}//刪去倒數(shù)第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项的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS UITableView的使用
- 下一篇: C# 实现酒店房态图