链表的特有算法操作

10.42 使用list的算法实现排序和删除重复元素。

#include<algorithm>
#include<list>
#include<iostream>
#include<string>
using namespace std;

void elimDup(list<string> &words)
{
    words.sort();
    words.unique();
}

bool isShorter(const string &s1,const string &s2)
{
    return s1.size()<s2.size();
}
int main()
{
    list<string> v2={"aaa","aaaaa","dfdaaaa","fdaa","aaa","dfaaaaa","aaaaa"};
    elimDup(v2);
    for(auto vv:v2)
        cout<<vv<<" ";
    cout<<endl;
    return 0;
}

链表的特有算法操作,布布扣,bubuko.com

时间: 2024-10-17 12:32:24

链表的特有算法操作的相关文章

单链表的创建算法

单链表的创建算法 当一个序列中只含有指向它的后继结点的链接时,就称该链表为单链表. 单链表的示意图如下: Head指针为单链表的头指针,单链表L:L既是单链表的名字,也是其头指针.链表中的最后一个结点的指针域定义为空指针(NULL). 单链表的定义: struct Node { ElemType data; struct Node *next; }; typedef struct Node LNode; typedef struct Node *LinkedList; 单链表有带头结点和不带头结

常见和链表相关的算法

一. 链表排序 链表排序和数组排序的思路类似,只是链表操作起来比较麻烦,因为不能随机访问,所以只能借助于类似于前置或后置插入,添加等概念来完成.下面给出了链表排序的几种方法. 辅助代码: //单链表节点的定义 typedef struct LinkNode{ int val; struct LinkNode* next; }LinkNode; //由一个数组创建单链表 LinkNode* CreateList(int A[], int count) { if(NULL == A) return

树常见的算法操作

树是数据结构中很重要的一部分,也是各大公司面试常考部分. 继树的各种遍历算法之后,今天又整理一下树的常见算法操作. 本文包括: 1.求节点的最近公共祖先 2.树的序列化与反序列化 3.已知先序遍历和中序遍历构造二叉树 4.已知中序遍历和后序遍历构造二叉树 1.求节点最近的公共祖先 此题不同的要求有不同的解法 如果已知树中的每一个结点有指向父节点的指针: 思路:从给定节点遍历到根节点,当父节点相等时返回. 解法1 private ArrayList<TreeNode> getPath2Root(

关于链表的一些简单操作

终于上黄金了.. 然后就是一波2连败... 最近 完全不想做题啊  一做题 就想碎觉啊 郁闷死了 根据书本 写了点关于单向链表的简单操作 可能还存在点小bug---先放它一马吧 以后可能再进行补充关于它的操作 毕竟还有好多 先慢慢找回敲键盘打代码的感觉 厌 1 /* 2 线性表之单向链表的一些常见操作 3 */ 4 #include <iostream> 5 using namespace std; 6 7 typedef int ElemType; 8 typedef struct LNod

静态链表的实现与操作(C语言实现)

我们知道要实现单链表,必须要有指针,那么像Java这样没有指针的的语言就略显蛋疼了. 没关系,我们有静态链表,其本质就是用采用数组的方式实现单链表的功能. 头文件: #ifndef _StaticLinkList_H_ #define _StaticLinkList_H_ typedef void StaticLinkList; typedef void StaticLinkListNode; StaticLinkList * StaticLinkList_Create(int capacity

链表的一些常用操作

1 // LinkListDemo.cpp : Defines the entry point for the console application. 2 // 3 4 #include "stdafx.h" 5 6 #include <iostream> 7 #include <assert.h> 8 using namespace std; 9 10 #define random(x) (rand()%x) 11 12 #define INVALIDVAL

链表的无锁操作 (JAVA)

看了下网上关于链表的无锁操作,写的不清楚,遂自己整理一部分,主要使用concurrent并发包的CAS操作. 1. 链表尾部插入 待插入的节点为:cur 尾节点:pred 基本插入方法: do{ pred = find_tail(); //重新找尾节点 }(! pred.next.compareAndSet(NULL, cur)) //pred.next 是否为NULL,是则将其指向cur,不是则有新的节点插入 这种插入方法是不带标记的,如果不涉及链表删除这个方法是可行的. 但是如果有删除操作,

写个链表反转的算法

没出去面试被打击之前,你永远不知道自己有多low逼,其实也不是技术不如别人,就是面试的技巧吧,去大公司面试,一般聊两句之后觉得还可以的就会问你算法.关于算法,其实平时的工作中不太用得着,但是却能考验一个人的能力,下面就先写一个链表反转的算法吧 public ListNode reverseList(ListNode head) { ListNode first = null; ListNode current = head; ListNode next = null; while(current

链表习题(4)-有一个带头结点的单链表,编写算法使其元素递增有序

1 /*有一个带头结点的单链表,编写算法使其元素递增有序*/ 2 /* 3 算法思想:利用直接插入排序的思想,先构成只含有一个数据结点的有序单链表,然后依次插入 4 剩余结点到合适的位置. 5 */ 6 void Sort(LinkList& L) 7 { 8 LNode *p = L->next, *pre; 9 LNode *r = p->next; 10 p->next = NULL; 11 while (p) 12 { 13 r = p->next; 14 pre