算法:链表

通过链表的一些题目,了解链表的基本操作实现,掌握递归算法的基本思路,掌握扎实的编程习惯。

一、单链表基本操作

1.1、单链表节点定义

struct ListNode
{
    int value;
    ListNode *pNext;
};

1.2、在尾部插入节点

void AddToTail(ListNode *pHead, int value)
{
    /*
     *    尾部插入
     *        添加空的头结点,简化代码
     */
    ListNode *node = new ListNode();
    node->value = value;
    node->pNext = NULL;

    ListNode *p = pHead;
    while (p->pNext != NULL)
    {
        p = p->pNext;
    }
    p->pNext = node;
}

1.3、删除第一个含有某值得节点

void RemoveNode(ListNode *pHead, int value)
{
    if (pHead->pNext == NULL)
    {
        return;
    }

    ListNode *p = pHead;

    while (p->pNext != NULL && p->pNext->value != value)
    {
        p = p->pNext;
    }

    if (p->pNext != NULL)
    {
        ListNode *p1 = p->pNext;
        p->pNext = p1->pNext;
        delete p1;
    }
}

二、有点难度的问题

2.1、

算法:链表

时间: 2024-11-06 19:54:13

算法:链表的相关文章

链表算法-链表前面插入节点

链表算法-链表前面插入节点

数据结构与算法-链表的基本操作---ShinPans

//链表操作:建立.插入.删除.查找.倒置.删除等基本操作 #include<stdio.h> #include<stdlib.h> typedef  struct LNode {       int data;       structLNode *next; }LNode,*Llist; LNode *creat_head();//创建一个空表 void creat_list(LNode *,int);//创建一个长度为n的线性链表 void insert_list(LNode

算法--链表的K逆序问题

转载请标明出处http://www.cnblogs.com/haozhengfei/p/9e6f4dda3138cf9fab17f996ec85b624.html 链表的K逆序问题 链表的k逆序 第7节 链表的k逆序练习题 有一个单链表,请设计一个算法,使得每K个节点之间逆序,如果最后不够K个节点一组,则不调整最后几个节点.例如链表1->2->3->4->5->6->7->8->null,K=3这个例子.调整后为,3->2->1->6-&g

基本算法——链表的一些基本操作

在简单的算法中,链表是我们经常用到的,同时,链表有时候也是让我们很头痛的一种基本操作. 下面代码中,包含了链表的一些基本操作: 1.链表的建立:(1)头插法 (2)尾插法 (3)有序建立 2.链表的插入 3.链表的删除 4.链表逆置 5.在链表中查找倒数元素 6.在链表中查找中间元素 7.判断链表是否有环 8.有序合并两个链表 声明如下: 1 #ifndef _HEAD_H 2 #define _HEAD_H 3 #include <stdio.h> 4 #include <stdlib

编程算法 - 链表逆序 代码(C)

链表逆序 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 链表逆序, 作为链表操作的基础必须要熟练手写. 主要包含3个部分, 一个指针记录后面节点, 一个指针记录前面节点, 把当前节点指到前面节点, 移动到后面节点, 前后指针依次移动. 非递归链表逆序算法的核心代码只有10行. 代码: /* * main.cpp * * Created on: 2014.9.12 * Author: Spike */ /*eclipse cdt, gcc 4.8.

数据结构与算法 - 链表

链表 题型1:数组和链表的区别是什么? 数组和链表的区别主要表现在以下几个方面: 1)逻辑结构.数组必须事先定义固定的长度,不能适应数据动态地增减.当数组中插入.删除数据项时,需要移动其他数据项.而链表采用动态分配内存的形式实现,可以适应数据动态第增减的情况,需要时可以用new/malloc分配内存空间,不需要时使用delete/free将已分配的空间释放,插入和删除元素不需要移动数据项. 2)内存结构.数组从栈中分配空间,链表从堆中分配空间. 3)数组中的数据在内存中是顺序存储的,而链表是随机

数据结构和算法-链表

链表分类 单向链表 双向链表 优势: 删除某个节点更加高效, 可以快速找到前驱节点 可以方便的在某个节点前插入元素 循环链表 当要处理的数据具有环形结构的时候, 适合循环链表. 如约瑟夫环问题 双向循环链表 数组的缺点是大小固定, 一旦声明长度就要占用连续的内存空间, 当空间不够用时更换更大的空间, 此时就需要将原数组的所有数据迁移过去, 比较费时. 链表则可以动态扩容. 数组在查询上可以更快, 链表在插入和删除上更快, 为了结合数组和链表的优点, 有同时使用的情况, 比如一个网站的用户注册,

算法--链表

首先链表分三种: 单链表,双链表,循环单链表 写个例子说明列表的创建和遍历: publicclassLinkList{ privateNode head; privateNode current; privatevoid add(int data){ if(head ==null){ head =newNode(data,null); current = head; }else{ //创建新的结点 Node node =newNode(data,null); //新创建的节点和列表进行关联 cu

算法--链表指定值清除

转载请标明出处http://www.cnblogs.com/haozhengfei/p/5155a3f1ce0612e35ec202156921836f.html 链表指定值清除 第8节 链表指定值清除练习题 现在有一个单链表.链表中每个节点保存一个整数,再给定一个值val,把所有等于val的节点删掉. 给定一个单链表的头结点head,同时给定一个值val,请返回清除后的链表的头结点,保证链表中有不等于该值的其它值.请保证其他元素的相对顺序. 测试样例: {1,2,3,4,3,2,1},2 {1

算法--链表的回文结构

转载请标明出处http://www.cnblogs.com/haozhengfei/p/abb04e825ba4b847dcb704605ea1cd36.html 链表的回文结构 链表回文结构练习 第9节 链表的回文结构练习题 请编写一个函数,检查链表是否为回文. 给定一个链表ListNode* pHead,请返回一个bool,代表链表是否为回文. 测试样例: {1,2,3,2,1} 返回:true {1,2,3,2,3} 返回:false Java (javac 1.7) 代码自动补全 1 i