019、Remove Nth Node From End of List(シングルチェーンテーブルの最後からN番目のノードを除去)
1346 ワード
http://blog.csdn.net/DERRANTCM/article/details/46997239
https://leetcode.com/problems/remove-nth-node-from-end-of-list/description/
本題
Given a linked list,remove the nth node from the end of list and return its head.
For example、
Given linked list:1->>2->3->4->5,and n=2.After removing the second node from the end,the linked list becompes 1->2->3->5.
ノート:
Gven will always be valid.
Try to do this in one pass.
タイトルの大意
シングルチェーンテーブルの最後からN番目の結点を削除します。入力したNは合法的で、一回の遍歴で操作が完了します。
問題を解く構想
まず、一つのポインタを歩いて、N番目のノードを見つけて、もう一つのポインタを頭の結点に向けて、そして二つのポインタを一緒に行って、前のポインタが最後になるまで、後のポインタは最後からN+1番目の結点で、最後からN番目の結点を削除すればいいです。
https://leetcode.com/problems/remove-nth-node-from-end-of-list/description/
本題
Given a linked list,remove the nth node from the end of list and return its head.
For example、
Given linked list:1->>2->3->4->5,and n=2.After removing the second node from the end,the linked list becompes 1->2->3->5.
ノート:
Gven will always be valid.
Try to do this in one pass.
タイトルの大意
シングルチェーンテーブルの最後からN番目の結点を削除します。入力したNは合法的で、一回の遍歴で操作が完了します。
問題を解く構想
まず、一つのポインタを歩いて、N番目のノードを見つけて、もう一つのポインタを頭の結点に向けて、そして二つのポインタを一緒に行って、前のポインタが最後になるまで、後のポインタは最後からN+1番目の結点で、最後からN番目の結点を削除すればいいです。
public class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode pa = head;
ListNode pb = head;
// n
for (int i = 0; i < n && pa != null; i++) {
pa = pa.next;
}
if (pa == null) {
head = head.next;
return head;
}
// pb pa n-1
// pa.next null,pb n+1
while (pa.next != null) {
pa = pa.next;
pb = pb.next;
}
pb.next = pb.next.next; //pb.next
return head;
}
}
赤い部分で半日考えましたが、この逆数のN番目を直接削除して、直接チェーンに戻りました。酔いました。