LeetCode解題--チェーンテーブルの最後からK番目のノード
19.チェーンテーブルの最後からN番目のノードを削除する
チェーンテーブルが与えられ、チェーンテーブルの最後からn番目のノードが削除され、チェーンテーブルのヘッダノードが返される.
例:
チェーンテーブルが与えられる:1->2->3->4->5、およびn=2.
最後から2番目のノードを削除すると、チェーンテーブルは1->2->3->5になります.
22.チェーンテーブルの最後からK番目のノード
チェーンテーブルを入力し、チェーンテーブルの最後からk番目のノードを出力します.多くの人の習慣に合うように、本題は1から数え始めます.すなわち、チェーンテーブルの末尾ノードは最後から1番目のノードです.たとえば、チェーンテーブルには6つのノードがあり、先頭ノードから1、2、3、4、5、6の順に値が表示されます.このチェーンテーブルの最後から3番目のノードは4のノードです.
例:
チェーンテーブルを1->2->3->4->5とk=2とする.
チェーンテーブル4->5に戻る.
解法1:長さを先に計算し,逆数K番目のノードを探し出し,それをヘッダノードとして出力する.
解法2:ダブルポインタは2つのポインタを設定し、fastポインタとslowポインタをK個の位置から離し、fastポインタを末尾に移動させる.
チェーンテーブルが与えられ、チェーンテーブルの最後からn番目のノードが削除され、チェーンテーブルのヘッダノードが返される.
例:
チェーンテーブルが与えられる:1->2->3->4->5、およびn=2.
最後から2番目のノードを削除すると、チェーンテーブルは1->2->3->5になります.
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
// ,
ListNode dummy = new ListNode(-1);
dummy.next = head;
ListNode fast = dummy;
ListNode slow = dummy;
for(int i= 0; i< n+1; i++){
fast = fast.next;
}
while(fast!= null){
fast = fast.next;
slow = slow.next;
}
slow.next = slow.next.next;
return dummy.next;
}
}
22.チェーンテーブルの最後からK番目のノード
チェーンテーブルを入力し、チェーンテーブルの最後からk番目のノードを出力します.多くの人の習慣に合うように、本題は1から数え始めます.すなわち、チェーンテーブルの末尾ノードは最後から1番目のノードです.たとえば、チェーンテーブルには6つのノードがあり、先頭ノードから1、2、3、4、5、6の順に値が表示されます.このチェーンテーブルの最後から3番目のノードは4のノードです.
例:
チェーンテーブルを1->2->3->4->5とk=2とする.
チェーンテーブル4->5に戻る.
解法1:長さを先に計算し,逆数K番目のノードを探し出し,それをヘッダノードとして出力する.
class Solution {
public ListNode getKthFromEnd(ListNode head, int k) {
// ,
ListNode pre = new ListNode(-1);
pre.next = head;
ListNode first = head;
//
int len = 0;
while(first != null){
len ++;
first = first.next;
}
// N , L-N+1
for(int i = 0; i < len-k+1; i++){
pre = pre.next;
}
return pre;
}
}
解法2:ダブルポインタは2つのポインタを設定し、fastポインタとslowポインタをK個の位置から離し、fastポインタを末尾に移動させる.
class Solution {
public ListNode getKthFromEnd(ListNode head, int k) {
// ,
//
ListNode fast = head;
ListNode slow = head;
ListNode res = slow;
//
for(int i = 0 ; i < k; i++){
fast = fast.next;
}
while(fast!= null){
slow = slow.next;
fast = fast.next;
}
return slow;
}
}