题解 | 删除有序链表中重复的元素-I (四种方法)

删除有序链表中重复的元素-I

https://www.nowcoder.com/practice/c087914fae584da886a0091e877f2c79

/**
* 递归法
 */
  ListNode* deleteDuplicates(ListNode* head) {
	if (!head || !head->next) {
	  return head;
	}

	head->next = deleteDuplicates(head->next);
	return head->val == head->next->val ? head->next : head;
  }


/**
* 迭代法  单指针
 */
ListNode* deleteDuplicates(ListNode* head) {
  if (!head || !head->next) {
	return head;
  }

  ListNode* cur = head;
  while (cur->next) {
	if (cur->val == cur->next->val) {
	  cur->next = cur->next->next;
	} else {
	  cur = cur->next;
	}
  }
  return head;
}


/*迭代法   双指针*/
ListNode* deleteDuplicates(ListNode* head) {
  if (!head || !head->next) {
	return head;
  }

  ListNode* pre = head;
  ListNode* cur = head->next;
  while (cur) {
	if (pre->val == cur->val) {
	  pre->next = cur->next;
	}  else {
	  pre = pre->next;
	}
	cur = cur->next;
  }
  return head;
}

/* 增加虚拟头结点 */
ListNode* deleteDuplicates(ListNode* head) {
  ListNode* dummyHead = new ListNode(1000);
  dummyHead->next = head;
  ListNode* cur = dummyHead;  
  while (cur->next) {
	if (cur->val == cur->next->val) {
	  cur->next = cur->next->next;
	} else {
	  cur = cur->next;
	}
  }

  ListNode* retNode = dummyHead->next;
  delete dummyHead;
  return retNode;   
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务