zoukankan      html  css  js  c++  java
  • 面试题18:删除链表节点

    18.1 在 O(1) 时间内删除链表节点

    <?php
    header("content-type:text/html;charset=utf-8");
    /*
     * 在 O(1) 时间内删除链表节点。 P119
     */
    class ListNode{
        var $val;
        var $next = NULL;
        function __construct($x){
            $this->val = $x;
        }
    }
    function deleteNode($head,$deleteNode){
        if($head == null || $deleteNode == null){
            return false;
        }
        if($head->next == null){
            return null;
        }
        if($deleteNode->next == null){
            return traverseDelete($head);
        }
        else{
            $deleteNode->val = $deleteNode->next->val;
            $deleteNode->next = $deleteNode->next->next;
            return $head;
        }
    }
    
    function traverseDelete($head){
        $cur = $head;
        while ($cur->next->next != null){
            $cur = $cur->next;
    
        }
        $cur->next = null;
        return $head;
    }
    
    $head = new ListNode(1);
    $head->next = new ListNode(2);
    $head->next->next = new ListNode(3);
    $head->next->next->next = new ListNode(4);
    $head->next->next->next->next = new ListNode(5);
    $deleteNode = $head->next->next->next->next;
    print_r(deleteNode($head,$deleteNode));

    18.2 删除链表中重复的结点

    NowCoder

    <?php
    header("content-type:text/html;charset=utf-8");
    /*
     * 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。
     * 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5。P122
     */
    class ListNode{
        var $val;
        var $next = NULL;
        function __construct($x){
            $this->val = $x;
        }
    }
    function deleteDuplication($pHead)
    {
        if($pHead == null || $pHead->next == null){
            return $pHead;
        }
    
        $next = $pHead->next;
    
        if($pHead->val == $next->val){  //若头结点与相邻的节点相等,就一直向下遍历到不等的地方,此时next就指向不等的结点
            while ($next != null && $pHead->val == $next->val){
                $next = $next->next;
            }
            return deleteDuplication($next); //以该不等的结点为头,继续向下遍历
        }
        else{
            $pHead->next = deleteDuplication($pHead->next);//若头结点与相邻的节点不等,那就看下一个结点。
        }
    
        return $pHead;
    
    }
    
    $head = new ListNode(1);
    $head->next = new ListNode(1);
    $head->next->next = new ListNode(2);
    $head->next->next->next = new ListNode(3);
    $head->next->next->next->next = new ListNode(3);
    $head->next->next->next->next->next = new ListNode(4);
    $head->next->next->next->next->next->next = new ListNode(5);
    print_r(deleteDuplication($head));
  • 相关阅读:
    仿pinterest实现瀑布流布局效果
    .NET执行cmd时,如何调试命令的执行效果
    在Sharepoint 2007 整合Discuz Nt论坛
    如何使用EWS获取邮件及其附件
    启明星win7桌面天气预报软件下载与使用方法(带时间)
    【helpdesk】启明星helpdesk7.0版本里,实现邮件提交功能介绍和原理
    微软.NET设计上的一个错误(从.NET1.14.0),不知道以后.NET会不会修复这个错误
    什么是Traceback Ping
    用ASP生成RSS以及讀取RSS
    [轉]訂單編號方式探討
  • 原文地址:https://www.cnblogs.com/xlzfdddd/p/10162809.html
Copyright © 2011-2022 走看看