zoukankan      html  css  js  c++  java
  • 删除链表中倒数第n个节点

    描述

    给定一个链表,删除链表中倒数第n个节点,返回链表的头节点。

    链表中的节点个数大于等于n

    样例

    给出链表1->2->3->4->5->null和 n = 2.

    删除倒数第二个节点之后,这个链表将变成1->2->3->5->null.

    挑战

    O(n)时间复杂度

    思路

    要删除倒数第n个节点,我们就要找到其前面一个节点,也就是倒数第n+1个节点,找到这个节点就可以进行删除
    定义两个指针,p和cur,cur指针向前走,走了n+1步之后,p指针开始走,当cur指针走到链表结尾的时候,p指针刚好走到倒数第n+1个节点处

    代码

     1 <?php
     2 //删除链表中倒数第n个节点,返回链表的头节点
     3 
     4 class Node
     5 {
     6     public $value;
     7     public $next = null;
     8     
     9     public function __construct($value)
    10     {
    11         $this->value = $value;
    12     }
    13 }
    14 
    15 /**
    16  * @param $node 头节点
    17  * @param $n 倒数第几个节点
    18  * 思路:要删除倒数第n个节点,我们就要找到其前面一个节点,也就是倒数第n+1个节点,找到这个节点就可以进行删除
    19  * 定义两个指针,p和cur,cur指针向前走,走了n+1步之后,p指针开始走,当cur指针走到链表结尾的时候,p指针刚好走到倒数第n+1个节点处
    20  */
    21 function delete($node, $n = 2)
    22 {
    23     if(empty($node))
    24     {
    25         return $node;
    26     }
    27     $header = new node(0);
    28     $header->next = $node;//头节点不能丢失(有可能是删除头节点)
    29     $cur = $node;
    30     $p = $node;//n的个数比节点数大时,删除第一个节点
    31     //cur指针先移动n步
    32     for($i=0; $i<$n; $i++)
    33     {
    34         $cur = $cur->next;
    35     }
    36     
    37     //找到倒数第n+1个节点
    38     while($cur->next != null)
    39     {
    40         $cur = $cur->next;
    41         $p = $p->next;
    42     }
    43     
    44     //删除
    45     $p->next = $p->next->next;
    46     return $header->next;
    47 }
    48 
    49 //创建链表可封装成一个方法
    50 $A = new Node(1);
    51 $B = new Node(2);
    52 $C = new Node(3);
    53 $D = new Node(4);
    54 $E = new Node(5);
    55 $A->next = $B;
    56 $B->next = $C;
    57 $C->next = $D;
    58 $D->next = $E;
    59 
    60 echo "<pre>";
    61 print_r(delete($A, 2));
  • 相关阅读:
    python:递归函数(汉诺塔)
    python:代码复用与函数递归
    unity接入平台sdk
    原型和原型链
    闭包js
    微信小游戏的排行榜重点
    微信简单的排行榜
    代理服务器出现问题解决方案
    nodejs的fs模块
    nodejs的l分数
  • 原文地址:https://www.cnblogs.com/573583868wuy/p/9446109.html
Copyright © 2011-2022 走看看