版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
版权
算法同时被 2 个专栏收录
12 篇文章0 订阅
订阅专栏
9 篇文章0 订阅
订阅专栏
删除已排序链表中重复的元素,使得每个元素只出现一次
例如输入:1 -> 2 -> 2 -> 3
输出:1 ->2 -> 3
算法思路:
表中并没有说明带有头结点,设头指针L,首结点p(指针为L)遍历整个表,进入循环体:拿当前结点与后继结点进行对比,如果二者相同,直接删除这个后继结点,这样使得每个元素只出现一次;如果二者不相同,把当前指针p顺序后移;voiddelete_duplicates(LinkList&L){ ListNode* p=L; ListNode* q;/*这里解释下循环的限制:当链表不为空,	并且当前不为尾节点(最大为尾节点的前驱结点,当此时为尾节点的前驱时,	直接将当前结点p置为尾节点,因为此时p->next=NULL*/while(p!=NULL&& p->next!=NULL){if(p->data== p->next->data){ q= p->next;//用于释放内存空间 p->next= p->next->next;free(q);}else{ p= p->next;}}}
收藏
一键三连
扫一扫,分享海报
专栏目录
[编程|20分]删除链表中重复的结点 时间限制:C/C++ 1秒,其他语言 2秒 空间限制:C/C++ 32768K,其他语言 65536K 题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1-&gt;2-&gt;3-&gt;3-&gt;4-&gt;4-&gt;5 处理后为 1-&gt;2-&gt;5
/有一有序的单向链表(允许出现值相同的结点),试设计一个算法 将值重复的结点删除,使所得的结果表中的值均不相同。/ # include# include# includeusing namespace std; typedef struct Node { int elem; struct Node *next; }*Linklist; void inlinklist(Linklis
设head指向一个非空单向链表,数据域值重复且无序,删除重复结点 例如原链表中数据域值为3->2->3->8->4->3->4->9->2->3 删除重复值后链表数据域值为3->2->8->4->9 代码如下: #include<stdio.h> #include<stdlib
程序代码如下所示: #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #include&lt;assert.h&gt; #define LEN 10 typedef int Elemtype; typedef struct LNode{	Elemtype data;	struct LNode *next; }LNode,*Lin
题目:如何删除单链表中的重复节点(即保证每个元素只出现一次,删除多余的,且后来出现的元素)。 一个没有排序的单链表,如list = {a, 1, x, b, e, f, f, e, a, g, h, b, m},请去掉重复项,并保留原顺序,以上链表去掉重复项后为 newList = {a, 1, x, b, e, f, g, h, m},请写出一个高效的算法。思路分析: 第一种方法:因为要求算
1.删除重复的元素,保留一个 leetcode题目 代码: /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { ...
剔除单链表重复元素(或结点) //剔除单链表重复元素(或结点) void pur_LinkList(LinkList L){	Lnode *p,*s,*q;	p=L-&gt;next;	if(!p)	return;	while(p-&gt;next)	{	q=p;	while(q-&gt;next)	//固定p所指结点,向后遍历,寻找与之数据域相同的结点 {	if...
1.知识点:逆序建立链表+节点删除 2.题意:按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删除(值相同的元素只保留最后输入的一个) 3.注意事项:节点删除时若删除节点为尾节点的情况 代码: #include <stdio.h> #include <stdlib.h> typedef struct str { int num; ...
算法练习篇之:删除链表中重复的结点题目描述解题思路图示代码实现总结 题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。例如,链表1->2->3->3->4->4->5 处理后为 1->2->5 解题思路 本题我们需要借助两个指针来帮助我们完成题目,首先创建一个新的头节点head,并让head指向...
1 class Solution { public: ListNode* deleteDuplication(ListNode* pHead) { if(pHead==NULL||pHead->next==NULL)//当前指针为空 //或者链表就一个节点 return pHead; ListNode*h...