このような問題には単純な反復解があります。リンクリストの最後にノードを挿入
Node Insert(Node head,int data) {
Node newNode = new Node();
newNode.data = data;
if (head == null) {
return newNode;
}
Node current = head;
while (current.next != null) {
current = current.next;
}
current.next = newNode;
return head;
}
それは完全に正常に動作します。しかし、私は再帰を学び、その視点で物事を見たいと思っています。したがって、私は下の解決策を思いついた、それはエレガントだが、私はそれがちょうど直感と与えられたコードが働いたことを認めなければならない。私は再帰や少なくとも私のコードがうまく動作することを確認するためのいくつかの方法で作業するためのメンタルモデルを開発したい。理論的には、以下の解決策が有効であることを検証する方法。
私はほんの少しの更なるコードを取ると、複数の出口ポイントを削除します
Node Insert(Node head,int data) {
// Base case.
if (head == null) {
Node newNode = new Node();
newNode.data = data;
return newNode;
}
// Smaller problem instance.
head.next = Insert(head.next, data);
return head;
}