1. 概述
给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中没有重复出现的数字。
示例 1:
输入: 1->2->3->3->4->4->5
输出: 1->2->5
示例 2:
输入: 1->1->1->2->3
输出: 2->3
2. 解题
<?phpclass ListNode{public $val = 0;/** @var ListNode */public $next = null;function __construct($val){$this->val = $val;}}class Solution{/*** @param ListNode $head* @return ListNode*/public function deleteDuplicates($head){if (!$head) {return null;}$dummy = new ListNode(0);$dummy->next = $head;$p = $dummy;// 循环迭代链表:条件是要移动指向当前的元素节点 或 改变下一个元素节点while ($p->next && $p->next->next) {if ($p->next->val == $p->next->next->val) {$num = $p->next->val;while ($p->next && $p->next->val == $num) {// 删除掉中间重复的元素(迭代:同时改变下一个元素节点,继续迭代使用)$p->next = $p->next->next;}} else {// (迭代:移动指向当前的元素节点)$p = $p->next;}}return $dummy->next;}}$head = new ListNode(1);$head->next = new ListNode(2);$head->next->next = new ListNode(3);$head->next->next->next = new ListNode(3);$head->next->next->next->next = new ListNode(4);$head->next->next->next->next->next = new ListNode(4);$head->next->next->next->next->next->next = new ListNode(5);$cls = new Solution();$ret = $cls->deleteDuplicates($head);print_r($ret);
