实现方案

在php面试中经常会被问到 php怎么实现单链

下面是完整的实现方案,可以参考

//单个节点
class node {
    //初始化变量,包括存储的内容 和 下一个数据的指针
    public id = 0;
    publicdata = '';
    public next = null;

    //构造函数,设置存储内容的数据
    public function __construct(id,nodedata){this->id = id;this->data = nodedata;
    }
}
class singleLink {
    publichead = '';
    public size = 0;

    public function insert(id,value,prenodeid = 0){
        node = new node(id,value);
        //空链表,直接添加
        if (this->size == 0){
            this->head =node;
        } elseif (prenodeid == 0) {
            //如果不是空链表,且并没有指定在某一个节点前添加
            //则在当前节点前添加node->next = this->head;this->head = node;
        } else {
            //在某一节点后添加新节点cruntnode = this->head;
            while(cruntnode->next != null ){
                if(cruntnode->next->id ==prenodeid){
                    node->next =cruntnode->next;
                    cruntnode->next =node;
                    break;
                }
                cruntnode =cruntnode->next;
            }
        }
        this->size++;
        returnthis;
    }

    public function edit(id,value){
        flag = false;current = this->head;
        while(@current->id !=null){
            if(current->id ==id){
                current->data =value;
                flag = true;                break;
            }current = current->next;
        }
        returnflag;
    }

    public function get(id=0){current = this->head;
        while(@current->id !=null){
            if(id !=0 &&current->id==id){node = current;
                break;
            } else {node[] = array(current->id,current->data);
            }
            current =current->next;
        }
        return node;
    }

    public function sort(){

    }

    public function delete(id){
        flag = false;current = this->head;
        while(@current->id !=null){
            if(current->next->id ==id){
                current->next =current->next->next;
                this->size--;flag = true; 
                break;
            } 
            current =current->next;
        }
        return flag;
    }

}linklist = new singleLink();
linklist->insert(1,'stark');linklist->insert(2,'shudong.wang');
linklist->insert(3,'rdhub.cn');linklist->insert(4,'haha4');
linklist->insert(5,'haha5');linklist->insert(6,'haha6');
linklist->insert(7,'haha7');linklist->delete(5);
linklist->insert(8,'haha8')->insert(9,'haha9')->insert(10,'haha10')->insert(11,'haha11');
var_dump(linklist);