2016-04-08 16 views
1

2番目に小さいキーをリンクリストに戻すにはどうすればよいですか?私は閲覧して、本当に私を助けた議論は見ませんでした。シンボルテーブルで2番目に小さいキーを返す方法

public class LinkedListST<Key extends Comparable<Key>, Value> { 
    private Node first;  // the linked list of key-value pairs 

    // a helper linked list data type 
    private class Node { 
     private Key key; 
     private Value val; 
     private Node next; 

    public Node(Key key, Value val, Node next) { 
     this.key = key; 
     this.val = val; 
     this.next = next; 
    } 
} 

public Key secondMinKey() { 
    if(first == null) return null; 
    Node secondMin; 

    return null; // TODO 
} 

これは私がこれまでに持っていた擬似コードですが、コードに変換するのに役立つ必要があります。 minとsecondMinノードを初期化していますか?

EDIT:これは私がこれまで

public Key secondMinKey() { 
    if(first == null) return null; 
    Node secondMin; 
    for (Node x = first.next.next; x != null; x = x.next) { 
     if (need to update min) update min and second min 
     else if (need to update second min) update second min 
    } 
    return second min; 
} 
+0

あなたはソートされていないリンクリストの中で2番目に小さい値を使用したいと思っていますか? –

+0

はい、申し訳ありませんが、明確でない場合 – yenyen

+0

'Key'と' Value'はカスタムクラスですか? –

答えて

1

リンクリストの2番目の最小の要素を見つけるために、持っているものですが、私はちゃんと滑らかな解決策を考えることができます。アルゴリズムはちょっとこんな感じです。

2つの "ポインタ"があります。両方の値を可能な限り最大値Keyに初期化します。リンクされたリストを

firstPtr = secondPtr = Key.MAX_VALUE; 

解析次の条件

  1. 有する電流Node.KeyfirstPtrよりも小さい場合、現在のNode.KeyfirstPtrsecondPtrの両方を更新します。
  2. 現在のNode.KeysecondPtrより小さい場合は、secondPtrを更新します。

これをコーディングする際に問題がある場合は教えてください。

+0

ありがとう、私はこれまでそこに持っているものをコード化したが、私はまだ理解していない:/私は新しいノード変数を初期化すると思いますか? compareToを使用して、次のノードが小さいか大きいかを比較する必要がありますか?私は、リンクされたリストを反復して現在のノードと、それまでのノードとを比較することができると考えていました。もしそれが小さければ、私は自分の鍵を更新するでしょう。しかし、コード化しようとするのが苦労しています – yenyen

+0

@yenyen私はちょっと混乱していると思います。 'Key'クラスと' Value'クラスを追加できますか? –

+0

私はそうは思わない?私はちょうどminとsecond minを更新する方法を知っておく必要があると思う。 – yenyen

関連する問題