本文实例讲述了PHP实现双链表删除与插入节点的方法。分享给大家供大家参考,具体如下:
概述:
双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。
实现代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
<?php class node{ public $prev ; public $next ; public $data ; public function __construct( $data , $prev =null, $next =null){ $this ->data= $data ; $this ->prev= $prev ; $this ->next= $next ; } } class doubleLinkList{ private $head ; public function __construct() { $this ->head= new node( "head" ,null,null); } //插入节点 public function insertLink( $data ){ $p = new node( $data ,null,null); $q = $this ->head->next; $r = $this ->head; while ( $q ){ if ( $q ->data> $data ){ $q ->prev->next= $p ; $p ->prev= $q ->prev; $p ->next= $q ; $q ->prev= $p ; } else { $r = $q ; $q = $q ->next; } } if ( $q ==null){ $r ->next= $p ; $p ->prev= $r ; } } //从头输出节点 public function printFromFront(){ $p = $this ->head->next; $string = "" ; while ( $p ){ $string .= $string ? "," : "" ; $string .= $p ->data; $p = $p ->next; } echo $string . "<br>" ; } //从尾输出节点 public function printFromEnd(){ $p = $this ->head->next; $r = $this ->head; while ( $p ){ $r = $p ; $p = $p ->next; } $string = "" ; while ( $r ){ $string .= $string ? "," : "" ; $string .= $r ->data; $r = $r ->prev; } echo $string . "<br>" ; } public function delLink( $data ){ $p = $this ->head->next; if (! $p ) return ; while ( $p ){ if ( $p ->data== $data ) { $p ->next->prev= $p ->prev; $p ->prev->next= $p ->next; unset( $p ); return ; } else { $p = $p ->next; } } if ( $p ==null) echo "没有值为{$data}的节点" ; } } $link = new doubleLinkList(); $link ->insertLink(1); $link ->insertLink(2); $link ->insertLink(3); $link ->insertLink(4); $link ->insertLink(5); $link ->delLink(3); $link ->printFromFront(); $link ->printFromEnd(); $link ->delLink(6); |
运行结果:
1
2
3
|
1,2,4,5 5,4,2,1,head 没有值为6的节点 |
希望本文所述对大家PHP程序设计有所帮助。
原文链接:http://blog.csdn.net/jingbing082619/article/details/46953751