删除顺序链表中重复的数 (一) leecode

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  * Definition for singly-linked list.
 3  * public class ListNode {
 4  *     int val;
 5  *     ListNode next;
 6  *     ListNode(int x) {
 7  *         val = x;
 8  *         next = null;
 9  *     }
10  * }
11  */
12 public class Solution {
13     public ListNode deleteDuplicates(ListNode head) {
14
15         if(head==null) return head;
16         if(head.next==null) return head;
17
18         ListNode pre=head;//save the pre to delete
19         ListNode cur=head.next;
20         while(cur!=null)
21         {
22             if(cur.val==pre.val)
23             {
24
25                 pre.next=cur.next;//删除cur节点
26                 cur=cur.next; //处理下一个节点
27
28
29             }
30             else
31             {
32                 pre=pre.next;
33                 cur=cur.next;
34
35             }
36
37
38         }
39
40         return head;
41
42
43     }
44 }

删除顺序链表中重复的数 (一) leecode

时间: 2024-10-13 15:30:11

删除顺序链表中重复的数 (一) leecode的相关文章

13.删除单链表中重复的元素

13.删除单链表中重复的元素 思路: 用Hashtable辅助,遍历一遍单链表就能搞定.同高级函数9的原因,我不太会使用C++STL中的hash.而如果使用set集合来存储链表中的所有的值,实际上效率和每次重新遍历单链表是一样的.“用了c++标准库中的set来保存访问过的元素,所以很方便的就可以判断当前节点是否在set集合中,直接使用set提供的find函数就可以了.而且使用set的查找在时间复杂度上比较低.”我不太清楚STL中set集合的实现方式,如果是基于类似hash结构的话,那自然效率O(

删除单链表中重复的值(Java版)

题目:删除带头结点的单链表中重复值的元素(即让每种值的元素只有一个) 解题思路: 用一个动态辅助存储数组,每次要向辅助数组中放入元素时,让辅助数组的长度加1,最长时与单链表一样长,设一个指针p,让它指向头结点,从单链表中第一个元素开始,将它的值放入辅助数组中,然后依次访问单链表后面的元素,用该元素的值与数组中所有已经被赋值的元素的值进行比较,如果不等于数组中任何元素的值,那么让p的next指向该结点的next指针,删除该结点元素,否则令p指向p的next指针,并将当前访问的节点元素的值依次放入辅

删除单链表中重复的值

题目:删除带头结点的单链表中重复值的元素(即让每种值的元素只有一个) 解题思路: 用一个动态辅助存储数组,每次要向辅助数组中放入元素时,让辅助数组的长度加1,最长时与单链表一样长,设一个指针p,让它指向头结点,从单链表中第一个元素开始,将它的值放入辅助数组中,然后依次访问单链表后面的元素,用该元素的值与数组中所有已经被赋值的元素的值进行比较,如果不等于数组中任何元素的值,那么让p的next指向该结点的next指针,删除该结点元素,否则令p指向p的next指针,并将当前访问的节点元素的值依次放入辅

删除链表中重复的数

题目: 给定一个排序的链表,将其中重复的数全部删除. 比如:1-->1-->1-->2-->3,则返回2-->3 #include <stdio.h> #include <stdlib.h> typedef struct ListNode { ListNode* next; int val; }; ListNode* rmDumplicateNums(ListNode* head) { ListNode stHead = {0}; ListNode*

删除单链表中重复的结点

先批评下<<数据结构实验教程(C语言版) 清华大学出版社 :王国钧主编>>这本书,CTMD,错误真多! *删除单链表重复结点 算法-:第一个跟后面比较,同则删除;第二个...第n个; 采用 *算法二:先排序, 将排好后的相同结点删除*/ void delSameNodeDLink(LinkList h) {//内外循环 LinkList p1, p2, p3; p1 = h; while (p1->next) { p2 = p1->next; //1 p3 = p2-&

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

比如 1->2->2->3,删除重复后,变为1->3. void delDup(Node* head) { Node node; node.next = head; Node* n1, n2; n1 = node; n2 = node->next; int data; while (n2) { data = n2->data; n2 = n2->next; if (n2 && n2->data == data) { n2 = n2->n

[程序员代码面试指南]链表问题-删除无序链表中重复出现的节点

题意 如题 题解 使用HashSet. 时间复杂度O(n),额外空间复杂度O(n). todo 使用选择排序也可以做. 代码 import java.util.HashSet; public class Main { public static void main(String args[]) { //测试 Node n1=new Node(2); Node n2=new Node(2); Node n3=new Node(3); n1.next=n2; n2.next=n3; Node hea

【剑指Offer】删除链表中重复的节点

题目:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5 A:当遍历到第一个值为重复的节点时,要有一个指针指向它的前一个节点    因为函数原型没有传二级指针进来,且头结点也有可能被删除,所以要构建一个新结点Head 用布尔型的flag_repeat判断是否有重复节点,若有重复节点则删除,若没有重复节点则移动指针 /* struct Li

54、删除链表中重复的结点

一.题目 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5 二.解法 1 /* 2 public class ListNode { 3 int val; 4 ListNode next = null; 5 6 ListNode(int val) { 7 this.val = val; 8 } 9 } 10 */ 11 import ja