码迷,mamicode.com
首页 > 其他好文 > 详细

Remove Duplicates from Sorted List 去除链表中重复值节点

时间:2014-10-28 23:51:41      阅读:221      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   color   ar   for   sp   div   on   

Given a sorted linked list, delete all duplicates such that each element appear only once.

For example,
Given 1->1->2, return 1->2.
Given 1->1->2->3->3, return 1->2->3.

如题目所诉,去除递增链表中重复值的节点。

刚开始思路如下:

  1. 设置一个指针用于遍历全部节点
  2. 让每个节点和其next节点值比较,若相同则将当前节点的next指向其next的next
  3. 继续遍历……

但是会有个问题,如果是{1,1,1},那么遍历到第一个1的时候,判断和第二个1相同,则将第一个1的next指向第三个1.

程序结束,最后输出为{1,1},所以此方法行不通。

基于上面的问题,需要设置一个临时指针来存放当前和其下个节点值重复的节点,因为根据题目要求,链表的值是递增的。

以{1,1,1,2,3,3}为例,首先将prev指针指向第一个1,(注:prev赋初值为节点head,当遇到有和其next值相同的节点时,再将此节点赋值为prev),判断并替换第二个1,将第一个1的next指向2,此时prev指向第一个1。

设置一个内层循环,判断后面的值是否和prev指向的1相同,当遇到第三个1时,因为他和1相同,所以,继续将第一个1指向第三个1的next,值为2,继续遍历……

 1 /**
 2  * Definition for singly-linked list.
 3  * struct ListNode {
 4  *     int val;
 5  *     ListNode *next;
 6  *     ListNode(int x) : val(x), next(NULL) {}
 7  * };
 8  */
 9 class Solution {
10 public:
11     ListNode *deleteDuplicates(ListNode *head) {
12         if(head == NULL)
13             return head;
14             
15         ListNode *node = head;
16         ListNode *prev = head;
17         while(node->next != NULL){
18             ListNode *cur_node = node->next;
19             if(node->val == cur_node->val)
20                 if(cur_node->next != NULL){
21                     node->next = cur_node->next;
22                     prev = node;
23                 }else
24                     node->next = NULL;
25                     
26             if(node->next != NULL)
27                 node = node->next;
28             
29             while(node->val == prev->val){
30                 if(node->next != NULL){
31                     prev->next = node->next;
32                     node = node->next;
33                 }else{
34                     prev->next = NULL;
35                     break;
36                 }
37                 
38             }
39             
40                     
41         }
42         
43         return head;
44         
45     }
46 };

 

Remove Duplicates from Sorted List 去除链表中重复值节点

标签:style   blog   io   color   ar   for   sp   div   on   

原文地址:http://www.cnblogs.com/fanchangfa/p/4058229.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!