PTA之求单链表结点的阶乘和】的更多相关文章

本题要求实现一个函数,求单链表L结点的阶乘和.这里默认所有结点的值非负,且题目保证结果在int范围内. 时间限制: 400ms 内存限制: 64MB 代码长度限制: 16KB 函数接口定义: int FactorialSum( List L ); 其中单链表List的定义如下: typedef struct Node *PtrToNode; struct Node { int Data; /* 存储结点数据 */ PtrToNode Next; /* 指向下一个结点的指针 */ }; typed…
本题要求实现一个函数,求单链表L结点的阶乘和.这里默认所有结点的值非负,且题目保证结果在int范围内. 函数接口定义: int FactorialSum( List L ); 其中单链表List的定义如下: typedef struct Node *PtrToNode; struct Node { int Data; /* 存储结点数据 */ PtrToNode Next; /* 指向下一个结点的指针 */ }; typedef PtrToNode List; /* 定义单链表类型 */ 裁判测…
问题:求单链表倒数第m个结点,要求不准求链表的长度,也不许对链表进行逆转 解:设置两个指针p和q,p.q指向第一个结点.让p先移动到链表的第m个结点,然后p和q同时向后移动,直到p首先到达尾结点.此时,q结点落后p (m-1)个结点,q所指向的结点就是单链表的倒数第m个结点. 算法实现: linkNode *searchLinkM(linkNode *link,int m) { linkNode *p=link->next; ) { ;i<m;i++) { p=p->next; if(p…
有一个单链表,提供了头指针和一个结点指针,设计一个函数,在 O(1)时间内删除该结点指针指向的结点. 众所周知,链表无法随机存储,只能从头到尾去遍历整个链表,遇到目标节点之后删除之,这是最常规的思路和做法. 如图所示,删除结点 i,那么只需找到 i 的前驱 h,然后连 h 到 j,再销毁i 即可.虽然可以安全的删除 i 结点,但是是顺序查找找到 i,之后删除,时间复杂度是 O(n)级别的.具体做法就是:顺序查找整个单链表,找到要删除结点 i 的直接前驱 h,把 h额 next 指向i 的 nex…
// 在O(1)时间内删除单链表结点 /* 思考: 很显然链表是一个节点地址不连续的存储结构 删除节点一般很容易会想到是修改p节点的前一个节点的next为p->next 然而除非是双向链表,否则无法在常量级的时间里找到p的前节点 转变思路: 既然改变不了p前节点的next 只能在p 本身动手脚 那可以考虑修改p->data 使得p->data的值为p->next->data的值,同样可以达到效果 */ #include <iostream> #include &l…
本题要求实现两个函数,分别将读入的数据存储为单链表.将链表中奇数值的结点重新组成一个新的链表.链表结点定义如下: struct ListNode { int data; ListNode *next; }; 函数接口定义: struct ListNode *readlist(); struct ListNode *getodd( struct ListNode **L ); 函数readlist从标准输入读入一系列正整数,按照读入顺序建立单链表.当读到−1时表示输入结束,函数应返回指向单链表头结…
链表需要用到指针 阶乘需要用到递归 链表中的注意事项: 1.链表L是否等于NULL ----------是循环结束的条件 2.链表L->Data ---------取链表L中各个结点的值 3.L=L->next  --------相当于++i  i++  是循环的条件 使得结点指向下一个结点 递归很简单的思想: 1.当n=0 或n=1时    返回1 2.否则    返回n*fun(n-1); 代码如下: int fun (int n){ if(n==0 ||n==1){ return 1;…
给定单链表的一个结点的指针,同时该结点不是尾结点,此外没有指向其它任何结点的指针,请在O(1)时间内删除该结点. int deleteNode(LNode **head, LNode **node) { if (!head || !node) { return 0; } else if (head == node) { if ((*head)->next) { *head = (*head)->next; } DestroyNode(node); node = NULL; //node是头结点…
#include <iostream> using namespace std; struct node{ int value; struct node *next; }; struct node *head; void insert(struct node * &head,int value) { if(head == NULL) { head = new struct node; head->value = value; head->next = NULL; retur…
#!/usr/bin/env python class Node(object): def __init__(self,elem,next_=None): self.elem = elem self.next = next_ class Simple_List(object): def __init__(self): self.head = None def is_empty(self): return self.head == None def prepend(self,elem): self…
头文件Linear.h // 单链表的类型定义 typedef struct node { int data; // 数据域 struct node *next; // 指针域 }Node, *LinkList; 因为单链表头结点和插入的结点要动态生成,所以要引入系统头文件<stdlib.h>或者<malloc.h>,不然会报错. 1. 初始化单链表 LinkList InitiateLinkList() { LinkList head; // 头指针 head = malloc(…
1.单链表: 在顺序表中,用一组地址连续的存储单元来一次存放线性表的结点,因此结点的逻辑顺序与物理顺序是一致的.但链表却不同,链表是用一组任意的存储单元来存放 线性表的结点,这组存储单元可以是连续的,也可以是非连续的,甚至是零散分布在内存的任何位置上.因此,链表中结点的逻辑顺序与物理顺序不一定相同.为了正确表示节点间的逻辑关系,必须在存储线性表的每个数据元素的同时,存储指示其后继结点的地址信息,这两部分信息共同构成了单链表结点的结构,如下图: 结点包括两个域,数据域用来存放结点的值,指针域用来存…
可能是顺序表研究的细致了一点,单链表操作一下子就实现了.这里先实现带头结点的单链表操作. 大概有以下知识点. 1;结点:结点就是单链表中研究的数据元素,结点中存储数据的部分称为数据域,存储直接后继地址的部分称为指针域. 2;结点示意图: 3;头指针:头指针始终指向链表第一个元素,当有头结点时头结点就是链表第一个元素.头指针具有标识左右,故头指针命名为链表的名字,这里为linklist.头指针是一定存在的. 4;头结点:引入头结点的目的是,将链表首元结点的插入和删除操作与其他结点的插入和删除操作统…
顺序表是用地址连续的存储单元顺序存储线性表中的各个数据元素, 逻辑上相邻的数据元素在物理位置上也相邻.因此,在顺序表中查找任何一个位置上的数据元素非常方便, 这是顺序存储的优点. 但是, 在对顺序表进行插入和删除时,需要通过移动数据元素来实现,影响了运行效率.线性表的另外一种存储结构——链式存储(Linked Storage), 这样的线性表叫链表(Linked List). 链表不要求逻辑上相邻的数据元素在物理存储位置上也相邻,因此,在对链表进行插入和删除时不需要移动数据元素,但同时也失去了顺…
什么是单链表 这两天看到很多有关单链表的面试题,对单链表都不知道是啥的我.经过学习和整理来分享一下啥是单链表和单链表的一些基本使用方法.最后看些网上有关单链表的面试题代码实例. 啥是单链表? 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素.这组存储单元既可以是连续的,也可以是不连续的. 链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据. 链表的结点结构…
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DataStructure { class MySingleLinkedList<T> : MyIList<T> { private Node<T> head; public Node<T> Head { ge…
模板类 //LinkList.h 单链表#ifndef LINK_LIST_HXX#define LINK_LIST_HXX#include <iostream>using namespace std; template<class T>struct Node{ T data; Node * next;}; template<class T>class LinkList{ public: LinkList(); //无参构造函数,建立只有头结点的空链表 LinkList…
总结提高,与君共勉 概述. 数据结构与算法亘古不变的主题,链表也是面试常考的问题,特别是手写代码常常出现,将从以下方面做个小结 [链表个数] [反转链表-循环] [反转链表-递归] [查找链表倒数第K个节点] [查找链表中间节点] [判断链表是否有环] [从尾到头打印单链表-递归] [从尾到头打印单链表-栈] [由小到大合并有序单链表-循环] [由小到大合并有序单链表-递归] 通常在java中这样定义单链表结构 <span style="font-family:Microsoft YaHe…
未优化版本:http://www.cnblogs.com/duwenxing/p/7569376.html slist.h #ifndef __SLIST_H__ #define __SLIST_H__ #include<cstdio> #include<malloc.h> #include<assert.h> typedef int ElemType; typedef struct Node { //定义单链表中的结点信息 ElemType data; //结点的数据…
slist.h #ifndef __SLIST_H__ #define __SLIST_H__ #include<cstdio> #include<malloc.h> #include<assert.h> typedef int ElemType; typedef struct Node { //定义单链表中的结点信息 ElemType data; //结点的数据域 struct Node *next; //结点的指针域 }Node,*PNode; typedef st…
直接上代码吧 #include<stdio.h> #include<malloc.h> /* 单链表特点: 它是一种动态的储存结构,链表中每个节点占用的储存空间不是预先分配的,而是运行时系统根据需求生成的 */ typedef struct lnode { int data; struct lnode *next; }lnode,*linklist; //结点定义 /* 关于头指针的一点说明: linklist L; 外面用头指针来标识一个单链表,如单链表L,单链表H等,是指链表的…
太简单了,直接贴题目然后上代码. 题目: 实验2 2.1 实验目的 熟练掌握线性表的链式存储结构. 熟练掌握单链表的有关算法设计. 根据具体问题的需要,设计出合理的表示数据的链式存储结构,并设计相关算法. 2.2 实验要求 本次实验中的链表结构指带头结点的单链表: 单链表结构和运算定义,算法的实现以库文件方式实现,不得在测试主程序中直接实现: 比如存储.算法实现放入文件:linkedList.h 实验程序有较好可读性,各运算和变量的命名直观易懂,符合软件工程要求: 程序有适当的注释. 2.3 实…
list.h #ifndef LIST_H #define LIST_H #include <iostream> #include <stdio.h> #include <malloc.h> //定义单链表结点 typedef struct _node { int data; //数据 struct _node *next; //指向下一结点 }node,*pNode; //创建链表 node *create_list(); //从链表头后插入数据 int insert…
在单链表中,每个结点包括两部分:存放每个数据元素本身信息的数据域和存放其直接后继存储位置的指针域. 单链表结点的类型描写叙述: typedef int ElemType; typedef struct node{ ElemType data; struct node *next; }LNode,*LinkList; 单链表的存取必须从头指针開始进行,因此,通经常使用头指针来标识一个单链表.若头指针为空,则表示空链表. 有时,在单链表的第一个结点之前附设一个结点.称之为头结点. 单链表的操作: 1…
#include <stdio.h> #include <stdlib.h> /** * 含头节点单链表定义及基本操作 */ //基本操作函数用到的状态码 #define TRUE 1; #define FALSE 0; #define OK 1; #define ERROR 0; #define INFEASIBLE -1; //当不可行时 const int OVERFLOW = -2; //当溢出时 //Status是新定义的一种函数返回值类型,其值为int型,意义为函数结果…
基础知识 大体结构和C++的链表差不多 补充之前不知道的:链表分两类,带和不带头结点的链表 现在才知道,Java没有像C/C++那样的指针 首先创建一个LinkList类,然后把链表的各个功能添加进去 创建结点 //当不考虑编号顺序时,找到当前链表最后节点,将最后节点next指向新节点 public void add(PersonNode node) { //因为头节点不能动,先需要一个辅助遍历节点temp PersonNode temp = head; while (true) {//遍历链表…
链表是有序的列表,但是在内存中存储图下图所示 链表是以 节点 的方式来存储,是 链式存储 每个节点包含 data 域.next 域,指向下一个节点 链表的各个节点 不一定是连续存储,如上图所示 链表还分:带头节点.不带头节点,根据实际需求来确定 上面进行了一个简单的介绍,下面分几部分来讲解: 目录 单链表 单链表的应用实例 单链表-无排序实现 单链表-有序实现(从小到大) 单链表的修改 单链表的删除 单链表面试题 求单链表中有效节点的个数 查找单链表中的倒数第 k 个结点 单链表的反转 从尾到头…
Given a linked list, return the node where the cycle begins. If there is no cycle, return null. Follow up: Can you solve it without using extra space? 这个求单链表中的环的起始点是之前那个判断单链表中是否有环的延伸,可参见我之前的一篇文章 (http://www.cnblogs.com/grandyang/p/4137187.html). 还是要设…
#include <stdio.h>#include <stdlib.h>#define NN 12#define MM 20typedef int elemType ;/*******************************************************//*             以下是关于线性表链接存储(单链表)操作的16种算法       *//***************************************************…
谢谢Lee.Kevin分享了这篇文章 最近在复习数据结构,想把数据结构里面涉及的都自己实现一下,完全是用C语言实现的. 自己编写的不是很好,大家可以参考,有错误希望帮忙指正,现在正处于编写阶段,一共将要实现19个功能.到目前我只写了一半,先传上来,大家有兴趣的可以帮忙指正,谢谢 在vs2010上面编译运行无错误. 每天都会把我写的新代码添加到这个里面.直到此链表完成. #include "stdafx.h" #include "stdio.h" #include &…