欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

不带头节点不带环的单向链表的一些操作(2)

程序员文章站 2024-03-21 13:32:16
...

判断链表是否为空

可以用三目运算符来化简代码
 329 //12.判断链表是否为空,若为空返回1,否则返回0
 330 int LinkListEmpty(LinkNode* head)
 331 {
 332 //    return head == NULL?1:0;
 333     if(head == NULL)
 334     {
 335     //空链表
 336     return 1;
 337     }
 338     return 0;
 339 }
求链表的长度

用size来统计链表的长度,创建一个指针cur,让cur指针最开始就指向链表的头部,创建一个循环,让size每次加1,然后再让cur指针后移,直到cur等于NULL,循环结束,详细见程序

 341 //13.求链表的长度(节点数)
 342 int LinkListSize(LinkNode* head)
 343 {
 344     if(head == NULL)
 345     {
 346     //空链表
 347     return 0;
 348     }
 349     LinkNode* cur=head;
 350     size_t size=0;
 351     while(cur!=NULL)
 352     {
 353         ++size;
 354         cur=cur->next;
 355     }
 356     return size;
 357 }

找链表的第一个节点

链表的第一个节点就是链表的头节点,因此直接返回链表头节点即可
 359 //14.找第一个节点
 360 LinkNode* LinkListFront(LinkNode* head)
 361 {
 362     return head;
 363 }

找链表的最后一个节点

新建一个指针cur,让cur开始指向链表的头节点,然后创建一个循环让cur一直指向cur的下一个元素,直到cur的下一个节点为NULL,循环结束,此时返回cur,就是最后一个节点,详细见程序
 365 //15.找最后一个节点
 366 LinkNode* LinkListBack(LinkNode* head)
 367 {
 368     if(head == NULL)
 369     {
 370         //空链表
 371         return NULL;
 372     }
 373     LinkNode* cur=head;
 374     while(cur->next!=NULL)
 375     {
 376     cur=cur->next;
 377     }
 378     return cur;                                                                                            
 379 }

链表销毁

类似于销毁单个元素,只不过将销毁的过程放在循环内部,详细见程序
 381 //16.链表销毁
 382 void LinkListDestroy(LinkNode** phead)
 383 {
 384     if(phead == NULL)
 385     {
 386     //非法输入
 387     return ;
 388     }
 389     if(*phead == NULL)
 390     {
 391     //空链表
 392     return ;
 393     }
 394     LinkNode* cur=*phead;
 395     while(cur!=NULL)
 396     {
 397     LinkNode* to_delete=cur;
 398     cur=cur->next;
 399     DestroyNode(to_delete);
 400     }                                                                                                      
 401     *phead == NULL;
 402 }
 403