25_判断链表是否为空+和+求链表长度

#include<stdio.h>
#include<malloc.h>

typedef struct Node{
    int data;//数据源
    struct Node* pNext;//指针域
}NODE,*PNODE; // NODE等价于struct Node,PNODE等价于struct Node*;
//函数的声明
//创建一个非循环的链表
 PNODE create_list(void){
     int len;//存放结果的数目
     int val;
     //创建头结点,该头结点不存储数据
     PNODE pHead = (PNODE)malloc(sizeof(NODE));
     PNODE pTail = pHead; //保证PTail永远指向链表的尾结点
     pTail->pNext = NULL;
     if(NULL == pHead){
         printf("程序内存分配失败");
     }
     printf("请输入你要创建节点的数目:");
     scanf("%d",&len);
    printf("你输入的值是%d\n:",len);
    for(int i = 0 ;i < len;i++){
         printf("请输入第%d节点的值:",i+1);
         scanf("%d",&val);
         PNODE pNew = (PNODE)malloc(sizeof(NODE));
        if(NULL == pNew){
         printf("程序内存分配失败");
     }
        pNew->data = val;
        pTail->pNext = pNew;
        pNew->pNext = NULL;
        pTail = pNew;
     }
     return  pHead;

 }

 /*
 判断链表是否为null
 */

 bool isEmpty(PNODE pHead){
     if(pHead->pNext == NULL){//说明链表为空
         return true;
     }else{
         return false;
     }
 }

 /*
 获得链表的长度
 */

 int length_list(PNODE pHead){
     int count = 0;
     PNODE p = pHead->pNext; // 第一个节点不存储数据,所以要移动下一个节点
     while(NULL != p){//说明该节点不为null
         int val = p->data; //得到数据
         printf("%d\n",val);
         p=p->pNext;//p移动到下一个节点
        count=count+1;
     }
     return count;
 }

 /*
  输出该链表的所有值
 */
 void printf_list(PNODE pHead){
     PNODE p = pHead->pNext; // 第一个节点不存储数据,所以要移动下一个节点
     while(NULL != p){//说明该节点不为null
         int val = p->data; //得到数据
         printf("%d\n",val);
         p=p->pNext;//p移动到下一个节点
     }

 }
int main(){
    printf("%s\n","ksdkklsdkl");
    PNODE pHead = NULL;//定义一个结构体指针变量
    pHead = create_list();
    printf_list(pHead);
    return 0;
}
时间: 2024-08-28 14:18:48

25_判断链表是否为空+和+求链表长度的相关文章

链表插入和删除,判断链表是否为空,求链表长度算法的,链表排序算法演示——C语言描述

关于数据结构等的学习,以及学习算法的感想感悟,听了郝斌老师的数据结构课程,其中他也提到了学习数据结构的或者算法的一些个人见解,我觉的很好,对我的帮助也是很大,算法本就是令人头疼的问题,因为自己并没有学习过算法的系统性的课程,现在还是处于不断摸索的阶段,好多算法题目根本就没有什么思路,导致自己对好多题目都很是头疼,就算是自己做过的一些算法的题目,再次遇到也还是不一定会做出来,他给出的建议就是,看懂别人的程序,然后自己去敲,一定会出错,然后调试,有错误接着调试,一直到没有错误为止,并且要时常的去复习

C/C++,数据结构实现两个链表的合并(尾插法建立单链表,求链表长度,直接插入排序)

1题目 实现两个链表的合并 2基本功能要求: 1.建立两个链表A和B,链表元素个数分别为m和n个. 2.假设元素分别为(x1,x2,-xm),和(y1,y2, -yn).把它们合并成一个线性表C,使得: 当m>=n时,C=x1,y1,x2,y2,-xn,yn,-,xm 当n>m时,C=y1,x1,y2,x2,-ym,xm,-,yn 3.输出线性表C: 用直接插入排序法对C进行升序排序,生成链表D,并输出链表D. 3测试数据: (1)A表(30,41,15,12,56,80) B表(23,56,

笔试,面试,C/C++,判断单链表是否带环?若带环,求环长度,求环入口点(两种方法)

SListNode* IsRing(SListNode *&pHead) //判断链表是否有环,求相聚点 {  //判空.有.没有  //思路:两个指针从头开始一快(2步)一慢(1步),若最后可以相聚,则链表有环  if (pHead)  {   SListNode *fast = pHead;   SListNode *slow = pHead;   while (fast&&fast->next)   {    fast = fast->next->next;

头插法链表的基本操作:创建空链表,插入结点,遍历链表,求链表长度,查找结点,删除结点

1 #include <stdio.h> 2 #include <stdlib.h> 3 /* 4 头插法链表的基本操作:创建空链表,插入节点,遍历输出节点数据,求链表长度,查找结点,删除结点. 5 */ 6 typedef struct node 7 { 8 int data; 9 struct node * next; 10 }NODE; 11 //创建空链表 12 NODE * createList() 13 { 14 NODE * head = (NODE *)malloc

判断2个单链表是否相交,并求出第一个相交结点

不考虑单链表有环的情况下 如果2个单链表相交,一定是Y型链表 1.遍历2个链表到尾结点,记录2个链表的长度x,y 2.尾结点相同,则相交. 3.从表头开始,长链表先走|x-y|步,之后2个链表一起走,判断第一个相同的点. 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 typedef struct student //定义链表结构 5 { 6 int num; 7 struct stu

《编程之美》3.6判断链表是否相交之扩展:链表找环方法证明

先看看原题:<编程之美>3.6编程判断两个链表是否相交,原题假设两个链表不带环. 为了防止剧透使得没看过原题目的读者丧失思考的乐趣,我把最好的解法隐藏起来.由于这个问题本身的解答并不是本文的重点,扩展问题也采用这种形式呈现. 注:位于(*)符号之间的文字出自于:http://blog.csdn.net/v_july_v/article/details/6447013,作者v_JULY_v. 用指针p1.p2分别指向两个链表头,不断后移:最后到达各自表尾时,若p1==p2,那么两个链表必相交 用

求链表倒数第几个节点

使用两个指针,和判断一个链表是否形成环类似 代码: #include <iostream> #include <list> using namespace std; typedef struct node { int data; struct node *next ; }Node,*pNode; void creatNode( pNode &pHead ){ bool isFirst=true; pNode p,q; int temp; scanf("%d&quo

leetcode——Longest Substring Without Repeating Characters 求链表中无重复字符的最大字串长度(AC)

mnesia在频繁操作数据的过程可能会报错:** WARNING ** Mnesia is overloaded: {dump_log, write_threshold},可以看出,mnesia应该是过载了.这个警告在mnesia dump操作会发生这个问题,表类型为disc_only_copies .disc_copies都可能会发生. 如何重现这个问题,例子的场景是多个进程同时在不断地mnesia:dirty_write/2 mnesia过载分析 1.抛出警告是在mnesia 增加dump

求链表的并集和交集

给定2个链表,求这2个链表的并集(链表)和交集(链表).不要求并集(链表)和交集(链表)中的元素有序. 如,输入: List1: 10->15->4->20 List2: 8->4->2->10 输出: 交集(链表):4->10 并集(链表):2->8->20->4->15->10 方法一(简单.直观的方法): 下面是得到2个链表的并集和交集的简单算法. InterSection(list1,list2): 初始化结果链表为空,遍历链