JAva実装---単一チェーンテーブルの最後からK番目のノードを検索し、チェーンテーブルを1回しか遍歴できないことを要求する;チェーンテーブルの最後からk番目のノードを削除
JAva実装単一チェーンテーブルの最後からK番目のノードを検索するには、チェーンテーブル を1回しか巡回できないことが要求される.チェーンテーブルの最後からk番目のノード を削除する.
単一チェーンテーブルの最後からK番目のノードを検索するには、チェーンテーブルを1回だけ巡回する必要があります.
2つの前後ノードforwardとbackward を定義する
まずforwardをk歩歩かせ、forwardをbackwardと一緒に歩かせ、forwardが空になるとbackwardは最後のk歩まで歩いた.
チェーンテーブルの最後からk番目のノードを削除
最後からk番目のノードを削除するには、最後からk+1番目のノード、すなわちkの前のノードを見つけることができる.
第2のステップは、kの前のノードのnextをkの後のノードに向ける.
すなわちkノードは削除するに相当する.
単一チェーンテーブルの最後からK番目のノードを検索するには、チェーンテーブルを1回だけ巡回する必要があります.
2つの前後ノードforwardとbackward を定義する
まずforwardをk歩歩かせ、forwardをbackwardと一緒に歩かせ、forwardが空になるとbackwardは最後のk歩まで歩いた.
class ListNode{
int data;
ListNode next;
}
public class Link{
public static void FindTailK(ListNode first,int k){
ListNode forward = first;
ListNode backward = first;
while(k-- != 0){
forward = forward.next;
}
while(forward != null){
forward = forward.next;
backward = backward.next;
}
System.out.println(backward.data);
}
public static void main(String[] args) {
ListNode n1 = new ListNode();
ListNode n2 = new ListNode();
ListNode n3 = new ListNode();
ListNode n4 = new ListNode();
ListNode n5 = new ListNode();
n1.data = 1;
n2.data = 2;
n3.data = 3;
n4.data = 4;
n5.data = 5;
n1.next = n2;
n2.next = n3;
n3.next = n4;
n4.next = n5;
FindTailK(n1,2);
}
}
チェーンテーブルの最後からk番目のノードを削除
最後からk番目のノードを削除するには、最後からk+1番目のノード、すなわちkの前のノードを見つけることができる.
第2のステップは、kの前のノードのnextをkの後のノードに向ける.
すなわちkノードは削除するに相当する.
public class Link{
public static ListNode DeleteTailK(ListNode first,int k){
ListNode forward = first;
ListNode backward = first;
while(k-- != 0){
forward = forward.next;
}
while(forward.next != null){ // backward k
forward = forward.next;
backward = backward.next;
}
backward.next = backward.next.next;
return first;
}
public static void print(ListNode head){
while(head != null){
System.out.println(head.data);
head = head.next;
}
}