我是靠谱客的博主 缓慢雪碧,这篇文章主要介绍实现php删除链表中重复的结点,现在分享给大家,希望可以做个参考。

删除链表中重复的结点:

定义两个指针pre和current

两个指针同时往后移动,current指针如果与后一个结点值相同,就独自往前走直到没有相等的

pre指针next直接指向current指针的后一个,把相同的都跳过

复制代码
1
2
3
4
5
6
7
8
9
10
11
pre=linkList current=linkList while current!=null if current->data==current->next->data value=current->data while value==current->next->data current=current->next pre->next=current->next pre=pre->next current=current->next return linkList
复制代码
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
<?php class Node{ public $data; public $next; public function __construct($data=""){ $this->data=$data; } } //构造一个带重复的链表 $linkList=new Node(); $linkList->next=null; $temp=$linkList; $node1=new Node(2); $temp->next=$node1; $temp=$node1; $node2=new Node(2); $temp->next=$node2; $temp=$node2; $node3=new Node(3); $temp->next=$node3; $temp=$node3; $node4=new Node(3); $temp->next=$node4; $temp=$node4; $node5=new Node(4); $temp->next=$node5; $node5->next=null; function deleteDuplication($pHead){ $pre=$pHead->next;//当前都指向第一个结点 $current=$pHead->next;//当前结点是第一个结点 while($current!=null){ //如果当前结点值和当前结点的下一个结点值相同 if($current->next!=null && $current->data==$current->next->data){ //保存当前结点值 $val=$current->data; //当前结点往后移直到和下一个结点值不相等 while($current->next!=null && $val==$current->next->data){ $current=$current->next; } //前一个指针next直接指向当前结点的next $pre->next=$current->next; } //两个指针同时后移 $pre=$pre->next; $current=$current->next; } return $pHead; } var_dump($linkList); $result=deleteDuplication($linkList); var_dump($result);
复制代码
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
object(Node)#1 (2) { ["data"]=> string(0) "" ["next"]=> object(Node)#2 (2) { ["data"]=> int(2) ["next"]=> object(Node)#3 (2) { ["data"]=> int(2) ["next"]=> object(Node)#4 (2) { ["data"]=> int(3) ["next"]=> object(Node)#5 (2) { ["data"]=> int(3) ["next"]=> object(Node)#6 (2) { ["data"]=> int(4) ["next"]=> NULL } } } } } } object(Node)#1 (2) { ["data"]=> string(0) "" ["next"]=> object(Node)#2 (2) { ["data"]=> int(2) ["next"]=> object(Node)#4 (2) { ["data"]=> int(3) ["next"]=> object(Node)#6 (2) { ["data"]=> int(4) ["next"]=> NULL } } } }

以上就是实现php删除链表中重复的结点的全部内容和代码,感谢大家对靠谱客的支持。

最后

以上就是缓慢雪碧最近收集整理的关于实现php删除链表中重复的结点的全部内容,更多相关实现php删除链表中重复内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(101)

评论列表共有 0 条评论

立即
投稿
返回
顶部