LeetCode之Remove Duplicates from Sorted List
生活随笔
收集整理的這篇文章主要介紹了
LeetCode之Remove Duplicates from Sorted List
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1、題目
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->2->2 return 1->2
1->2->3->3 return 1->3
2、代碼實現(xiàn)
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>struct List_Node {int val;struct List_Node *next;
};
struct List_Node* deleteDuplicates(struct List_Node* head) {}
void show_list (struct List_Node* head) {while (head != NULL) {printf("val:%d\n", head->val);head = head->next;}
}struct List_Node* create_head1(){struct List_Node *p1, *p2, *p3, *p4, *p5;p1 = (struct List_Node *)malloc(sizeof(p1));p2 = (struct List_Node *)malloc(sizeof(p2));p3 = (struct List_Node *)malloc(sizeof(p3));p4 = (struct List_Node *)malloc(sizeof(p4));p5 = (struct List_Node *)malloc(sizeof(p5));p1->val = 1;p2->val = 1;p3->val = 2;p4->val = 3;p5->val = 3; p1->next = p2;p2->next = p3;p3->next = p4;p4->next = p5;p5->next = NULL;return p1;}struct List_Node* create_head2(){struct List_Node *p1, *p2, *p3, *p4, *p5;p1 = (struct List_Node *)malloc(sizeof(p1));p2 = (struct List_Node *)malloc(sizeof(p2));p3 = (struct List_Node *)malloc(sizeof(p3));p4 = (struct List_Node *)malloc(sizeof(p4));p5 = (struct List_Node *)malloc(sizeof(p5));p1->val = 1;p2->val = 2;p3->val = 2;p4->val = 2;p5->val = 2; p1->next = p2;p2->next = p3;p3->next = p4;p4->next = p5;p5->next = NULL;return p1;
}struct List_Node* create_head3(){struct List_Node *p1, *p2, *p3, *p4, *p5;p1 = (struct List_Node *)malloc(sizeof(p1));p2 = (struct List_Node *)malloc(sizeof(p2));p3 = (struct List_Node *)malloc(sizeof(p3));p4 = (struct List_Node *)malloc(sizeof(p4));p5 = (struct List_Node *)malloc(sizeof(p5));p1->val = 1;p2->val = 2;p3->val = 3;p4->val = 3;p5->val = 3; p1->next = p2;p2->next = p3;p3->next = p4;p4->next = p5;p5->next = NULL;return p1;
}int main()
{struct List_Node *head = create_head3();show_list(head);puts("after");struct List_Node *p = head;struct List_Node *q = head->next;while (q != NULL) {if (p->val == q->val) {p->next = q->next; } else {p = q; //注意這里已經(jīng)是head = head.next// p = p.next;}q = q->next;} show_list(head);return 0;
}
?
3、總結(jié)
比如1->1->2->3->3我們這樣分析
第一:需要搞個指針從第二個元素往后移動和前面一個指針指向下一個元素對比,如果前后2個指針的值一樣,那么前面的指針需要指向下一個元素的下一個元素
第二:每對比一步,需要第二個指針往后移動
第三:只有當前元素和下面一個元素的下面一個元素不相等,我們就把他們連接起來,也就是走head = head.next;
過程如下
1->1
1->2 (head = head.next)
1->2->3(head = head.next)
1->2->3->null?
?
總結(jié)
以上是生活随笔為你收集整理的LeetCode之Remove Duplicates from Sorted List的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode之Remove Dupl
- 下一篇: LeetCode之Longest Com