2

PHP OOPを使用して特定のインデックスでリンクリストにノードを挿入したい...開始時にノードを挿入し、最後にノードを挿入するための私のコードは次のとおりです

//top class for creating node
class ListNode
{
    public $data;
    public $next;
    function __construct($data)
    {
        $this->data = $data;
        $this->next = NULL;
    }

    function readNode()
    {
        return $this->data;
    }
}

//main class which will insert node

class LinkList
{
    private $firstNode;
    private $lastNode;
    private $count;
    function __construct()
    {
        $this->firstNode = NULL;
        $this->lastNode = NULL;
        $this->count = 0;
    }
    //insertion in start of linklist

    public function insertFirst($data)
    {
        $link = new ListNode($data);
        $link->next = $this->firstNode;
        $this->firstNode = &$link;
        /* If this is the first node inserted in the list
           then set the lastNode pointer to it.
        */
        if($this->lastNode == NULL)
            $this->lastNode = &$link;

        $this->count++;
    }
    //insertion at the last of linklist
    public function insertLast($data)
    {
        if($this->firstNode != NULL)
        {
            $link = new ListNode($data);
            $this->lastNode->next = $link;
            $link->next = NULL;
            $this->lastNode = &$link;
            $this->count++;
        }
        else
        {
            $this->insertFirst($data);
        }
    }
  }
4

3 に答える 3

0

次のコードで修正しました

public function insert($NewItem,$key){
        if($key == 0){
        $link = new ListNode($NewItem);
        $link->next = $this->firstNode;
        $this->firstNode = &$link;

        /* If this is the first node inserted in the list
           then set the lastNode pointer to it.
        */
        if($this->lastNode == NULL)
            $this->lastNode = &$link;

        $this->count++;
    }
    else{
        $link = new ListNode($NewItem);
        $current = $this->firstNode;
        $previous = $this->firstNode;

        for($i=0;$i<$key;$i++)
        {       
                $previous = $current;
                $current = $current->next;
        }

           $previous->next = $link;
           $link->next = $current; 
           $this->count++;
    }

    }
于 2012-10-17T10:08:10.350 に答える
0

OOP を維持するためにできることは、ListNodeクラスにinsertBeforeMeinsertAfterMeなどのメソッドを作成することです。@Flame が指すように、LinkListビジネスではありません

于 2012-10-16T13:55:56.897 に答える
0

これを ListNode に追加します

function addAtIndex($index, $data) {
      if ($index != 0) {
            //pass through links till you hit the index
            $next->addAtIndex($index-1, $data)
         } else {
            $node = new ListNode($data);
            $node->next = $this->next;
            $this->next = &node;
         }
}

次のように呼び出します。

$firstNode->addAtIndex($index, $data)

テストされていません...ただの考えです

于 2012-10-16T13:54:06.197 に答える