题意:

image.png

解题思路:

  1. 思路:双指针遍历:O(n)
  2. 1. 从前往后扫描,遇到有前后两个相同的节点,则直接删除后面的那个节点,否则指针移动到后面节点;

PHP代码实现:

  1. /**
  2. * Definition for a singly-linked list.
  3. * class ListNode {
  4. * public $val = 0;
  5. * public $next = null;
  6. * function __construct($val) { $this->val = $val; }
  7. * }
  8. */
  9. class Solution {
  10. /**
  11. * @param ListNode $head
  12. * @return ListNode
  13. */
  14. function deleteDuplicates($head) {
  15. if (!$head) return null;
  16. $cur = $head;
  17. while ($cur->next) {
  18. if ($cur->val == $cur->next->val) {
  19. $cur->next = $cur->next->next;
  20. } else {
  21. $cur = $cur->next;
  22. }
  23. }
  24. return $head;
  25. }
  26. }

GO代码实现:

  1. /**
  2. * Definition for singly-linked list.
  3. * type ListNode struct {
  4. * Val int
  5. * Next *ListNode
  6. * }
  7. */
  8. func deleteDuplicates(head *ListNode) *ListNode {
  9. cur := head
  10. for cur != nil && cur.Next != nil {
  11. if cur.Val == cur.Next.Val {
  12. cur.Next = cur.Next.Next
  13. } else {
  14. cur = cur.Next
  15. }
  16. }
  17. return head;
  18. }