C++11 删除链表重复数值

#include <memory>
#include <iostream>
#include <chrono>
#include <thread>
using namespace std;

struct ListNode{
	int val;
	shared_ptr<ListNode> next;
};

bool InsertNode(shared_ptr<ListNode>& insertPos,int val)
{
	shared_ptr<ListNode> node(new ListNode);
	if (!node)
		return false;
	node->val = val;
	node->next = NULL;
	insertPos->next = node;
	insertPos = node;

	return true;
}

bool  InitLinkList(shared_ptr<ListNode>& head)
{
	if ( (!head) || NULL != head->next )
		return false;

	head->val = 1;
	shared_ptr<ListNode> tail = head;

	InsertNode(tail, 1);
	InsertNode(tail, 2);
	InsertNode(tail, 3);
	InsertNode(tail, 3);

	return true;
}

void CoutLinkList(const shared_ptr<ListNode>& head)
{
	for (shared_ptr<ListNode> node = head;
		node; node = node->next)
	{
		cout << node->val << " ";
	}
	cout << endl;
}

shared_ptr<ListNode>  removeDuplicates(shared_ptr<ListNode>& head)
{
	if (head == NULL)
	{
		return NULL;
	}

	shared_ptr<ListNode> node = head;
	while(node->next != NULL){
		if(node->val == node->next->val){
			shared_ptr<ListNode> tmp = node->next;
			node->next = node->next->next;
		}else
		{
			node = node->next;
		}
	}
	return head;
}

int main()
{
	shared_ptr<ListNode> head(new ListNode);
	InitLinkList(head);

	CoutLinkList(head);

	head = removeDuplicates(head);

	CoutLinkList(head);

    return 0;
}

  

时间: 2024-10-17 14:48:42

C++11 删除链表重复数值的相关文章

单链表之删除链表重复数据

1 public static void deleteDup(Node head){ 2 Node p = head; 3 while(p!=null){ 4 Node q = p; 5 while(q.next != null){ 6 if(p.data == q.next.data){ 7 q.next = q.next.next; 8 //不能加q = q.next; 9 }else{ 10 q = q.next; 11 } 12 } 13 p = p.next; 14 } 15 }

83.Remove Duplicates from Sorted List(删除链表重复元素,STL容器map)

Given a sorted linked list, delete all duplicates such that each elementappear only once. For example, Given 1->1->2, return 1->2. Given 1->1->2->3->3, return 1->2->3. HideTags Linked List #pragma once #include<iostream> #

剑指offer——面试题18.1:删除链表中重复的节点

1 // 面试题18(二):删除链表中重复的结点 2 // 题目:在一个排序的链表中,如何删除重复的结点?例如,在图3.4(a)中重复 3 // 结点被删除之后,链表如图3.4(b)所示. 4 5 #include <cstdio> 6 #include "List.h" 7 8 void DeleteDuplication(ListNode** pHead) 9 { 10 if(pHead == nullptr || *pHead == nullptr) 11 retur

删除链表中重复的结点-剑指Offer

删除链表中重复的结点 题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5 思路 需要两个指针,一个指向前一个节点preNode,另一个指向当前节点node,如果遇到相等的节点,node向后移动,preNode不动,存下node.val方便后面的比较,直到遇到node和node.next不相等,preNode就可以指向node.n

删除链表中重复的节点

因为这个程序快累死老子了,细节处理很麻烦package Solutions; import java.util.ArrayList; /** * Created by hu on 2015/12/12. *//** 删除链表中重复的结点*在一个排序的链表中,存在重复的结点,* 请删除该链表中重复的结点,重复的结点不保留,返回链表头指针.* 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5** */public class solut

[华为机试练习题]24.删除链表中的重复节点、剩余节点逆序输出

题目 描述: 题目描述: 输入一个不带头节点的单向链表(链表的节点数小于100),删除链表中内容重复的节点(重复的节点全部删除),剩余的节点逆序倒排. 要求实现函数: void vChanProcess(strNode * pstrIn,strNode * pstrOut); [输入] pstrIn:输入一个不带头节点的单向链表 [输出] pstrOut:删除内容重复的节点(重复的节点全部删除),剩余节点逆序输出(不带头节点,链表第一个节点的内存已经申请). [注意]只需要完成该函数功能算法,中

LintCode Python 简单级题目 112.删除链表中的重复元素

题目描述: 给定一个排序链表,删除所有重复的元素每个元素只留下一个. 您在真实的面试中是否遇到过这个题? Yes 样例 给出 1->1->2->null,返回 1->2->null 给出 1->1->2->3->3->null,返回 1->2->3->null 标签 链表 题目分析: 给定一个排序链表,删除所有重复的元素每个元素只留下一个. 源码: """ Definition of ListNod

删除链表中的重复节点、剩余节点逆序输出

#include <stdlib.h> #include <algorithm> #include <functional> #include <iostream> #include "oj.h" using namespace std; /* 功能: 输入一个不带头节点的单向链表(链表的节点数小于100),删除链表中内容重复的节点(重复的节点全部删除),剩余的节点逆序倒排. 输入: pstrIn: 输入一个不带头节点的单向链表 输出:

18 删除链表的节点/重复节点

题目描述:  题目一:在O(1)时间内删除链表节点 :在给定的单向链表的头指针和一个节点指针,定义一个函数在O(1)时间内删除该节点. //链表定义 struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } }; 注意:输入提供了要删除节点的指针!! 测试用例: 1)功能测试(从有多个节点的链表中删除中间.头.尾节点:从只有一个节点的链表中删除唯一的节点) 2)特殊输入测试