链表面试题(六)---删除单链表倒数第k个结点
来源:互联网 发布:mac os重装找不到硬盘 编辑:程序博客网 时间:2024/05/29 12:30
一、结构体定义
typedef int DataType;typedef struct ListNode//定义结点{ DataType data; struct ListNode* next;}ListNode,*PListNode;typedef struct PList//定义一个成员是指向结点的指针的结构体{ PListNode PHead;}PList,*PList;
二、函数实现
(1)删除单链表倒数第k个结点—(k >1&& k<链表总结点数)—O(N)
void DelKNode1(PList PList,int k){ PListNode front=NULL; PListNode back=NULL; PListNode del=NULL; int i=0; assert(PList); front=PList->PHead; back=PList->PHead; if (PList->PHead==NULL)//如果是空链表 { return ; } else //如果不是空链表,k>1 && K<链表总节点数 { for(i=1;i<k;i++) //front先走到k-1步,由于不知道链表的总节点数,所以要时刻注意链表访问越界 { front=front->next; } while (front->next) { front=front->next; back=back->next; } del=back->next; back->data=del->data; back->next=del->next; free(del); }}
另一种写法:
(2)删除单链表倒数第k个结点(K任意–有可能出现不合理情况)
//6.1【6的加强版】删除单链表倒数第k个结点(K任意--有可能出现不合理情况)---O(N)void DelKNode2(PList PList,int k){ PListNode front=NULL; PListNode back=NULL; PListNode del=NULL; int i=0; assert(PList); front=PList->PHead; back=PList->PHead; if (PList->PHead==NULL||k<=0)//如果是空链表或者k<=0 { return ; } if (k==1&&PList->PHead->next==NULL)//如果结点数为1,k==1 { free(front); PList->PHead=NULL; return; } if (k==1)//如果不是空链表,结点数>1,k==1 { while (front->next->next) { front=front->next; } free(front->next); front->next=NULL; return; } else //如果不是空链表,k>1 { for(i=1;i<k;i++) //front先走到k-1步,由于不知道链表的总节点数,所以要时刻注意链表访问越界 { if (front->next) { front=front->next; } else//当k的值大于结点个数 { return ; } } while (front->next) { front=front->next; back=back->next; } del=back->next; back->data=del->data; back->next=del->next; free(del); }}
阅读全文
0 0
- 链表面试题(六)---删除单链表倒数第k个结点
- 链表面试题---删除倒数第k个结点、逆置单链表
- 链表面试题(五)---寻找链表的倒数第k个结点O(N)
- 链表面试题/逆置/反转单链表+查找单链表的倒数第k个节点
- 删除单链表的倒数第k个结点
- 单链表操作之删除倒数第k个结点
- 链表倒数第k个结点
- 数据结构之链表面试题汇总(一)--查找单向链表的中间节点、倒数第K个节点
- 找链表的中间结点和倒数第k个结点(链表笔试题面试题)
- 面试题15:链表中倒数第k个结点
- 面试题13:链表中倒数第k个结点
- 【面试题十五】链表中倒数第k个结点
- 面试题整理 2:求链表倒数第 k 个结点
- 面试题15 链表中倒数第K个结点
- 面试题15:链表中倒数第k个结点
- 面试题15链表中倒数第k个结点
- 面试题15:链表中倒数第k个结点
- 剑指offer面试题 链表中倒数第K个结点
- volley
- js原生学习-初级-练习02
- 如何求一个数的二进制表示的1的个数
- Ubuntu16 安装Oracle JDK 8
- 基于JavaFX的聊天室ChatRoom
- 链表面试题(六)---删除单链表倒数第k个结点
- eclipse识别的项目文件
- warning C4407: 在指向成员表示形式的不同指针之间进行转换,编译器可能生成不正确的代码
- Spring MVC中上传文件实例
- centos7下部署python网络爬虫程序及django程序总结
- #pragma once与#ifndef两种防止头文件二次编译的区别
- Sass嵌套属性
- 一些CSS小结
- Dubbo之——分布式服务子系统的划分