单链表之删除头结点,查找等于定值x的结点数,单链表的逆置
/*
* @Author: 一届书生
* @Date: 2020-03-08 09:52:27
* @LastEditTime: 2020-03-08 13:58:30
*/
#include <iostream>
using namespace std;
#define elemType char typedef struct node
{
elemType data;
struct node *next;
} Lnode, *Pnode; // 带头结点-尾插法
Pnode create1()
{
Pnode head, tail, p; //头结点 尾结点 临时结点
elemType i;
head = new node; //申请头结点
tail = head; //头尾指针指向同一个结点
while ((cin >> i) && (i != '*'))
{
p = new node; //申请新结点
p->data = i; //输入结点的数据域
tail->next = p; //将新结点插入链表尾部
tail = p; //让链表的尾结点指向新结点
}
tail->next = NULL; //尾指针指向空
return head;
}; // 带头结点-头插法
Pnode create2()
{
Pnode head, p; //头结点 尾结点 临时结点
head = new node;
head->next = NULL;
elemType x;
while (cin >> x)
{
p = new node;
p->data = x;
p->next = head->next;
head->next = p;
}
return head;
}; // 删除头结点
Pnode deletHeadNode(Pnode &a)
{
if (a == NULL)
{
cout << "空表" << endl;
return a;
}
Pnode t = a;
a = a->next;
t->next = NULL;
free(t);
return a;
} // 添加头结点
Pnode addHeadNode(Pnode &p){
Pnode head;
head=new node;
head->next=p;
return head;
} // 统计出带头单链表中结点的值等于给定值X的结点数
int getNumX(Pnode a,elemType x){
int cnt=0;
a=a->next;
while(a){
if(a->data==x)
cnt++;
a=a->next;
}
return cnt;
} // 单链表逆置 头插法
void reverse(Pnode &head) {
Pnode t,p,q=head->next;
p=q->next;
q->next=NULL;
while(p){
t=p->next;
p->next=q;
q=p;
p=t;
}
head->next=q;
} // 带头结点遍历输出
void display(Pnode head){ //输出链表中的数据
Pnode p;
p = head->next;
while (p != NULL){
cout<< p->data;
if (p->next != NULL)
cout<<' ';
p = p->next; //p指向下一个结点
}
cout<<endl;
} int main()
{
// 样例:123456789111
Pnode p;
p = create1();
display(p); // 带头结点遍历输出
// 输出:1 2 3 4 5 6 7 8 9 1 1 1 p = deletHeadNode(p);
display(p); // 查看是否已经删除了头结点,若成功删除的话,应该从第二个结点开始输出
// 输出:2 3 4 5 6 7 8 9 1 1 1 p=addHeadNode(p);
display(p); //加上头结点后,再遍历一遍看看结果
// 输出:1 2 3 4 5 6 7 8 9 1 1 1 elemType t='1';
cout<<getNumX(p,t)<<endl; //单链表:123456789111 输出:4 reverse(p);
display(p); // 输出:1 1 1 9 8 7 6 5 4 3 2 1 return 0;
}
单链表之删除头结点,查找等于定值x的结点数,单链表的逆置的更多相关文章
- 单链表在不知头结点的情况下对第i个元素的删除
一.首先,看看单链表中第i个元素的删除: Status ListDelete_L (LinkList &L,int i,ElemType &e){ //在带头结点的单链表L中,删除第i ...
- 建立链表的虚拟头结点 203 Remove Linked List Element,82,147,148,237
该逻辑对于删除第一个元素不适用. 这样的代码不优美 /** * Definition for singly-linked list. * struct ListNode { * int val; * ...
- [Leetcode] Remove duplicate from sorted list ii 从已排序的链表中删除重复结点
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numb ...
- 在单链表和双链表中删除倒数第k个结点
题目: 分别实现两个函数,一个可以删除单链表中倒数第K个节点,另一个可以删除双链表中倒数第K个节点. 要求: 如果链表长度为N,时间复杂度达到O(N),额外空间复杂度达到O(1). 解答: 让链表从头 ...
- 《Java数据结构与算法》笔记-CH5-链表-2单链表,增加根据关键字查找和删除
/** * Link节点 有数据项和next指向下一个Link引用 */ class Link { private int iData;// 数据 private double dData;// 数据 ...
- 剑指offer56:删除链表中重复的结点,排序的链表中,删除重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
1 题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处 ...
- 左神算法书籍《程序员代码面试指南》——2_02在单链表和双链表中删除倒数第k个字节
[题目]分别实现两个函数,一个可以删除单链表中倒数第K个节点,另一个可以删除双链表中倒数第K个节点.[要求]如果链表长度为N,时间复杂度达到O(N),额外空间复杂度达到O(1).[题解]从头遍历链表, ...
- 《剑指offer》第十八题(删除链表中重复的结点)
// 面试题18(二):删除链表中重复的结点 // 题目:在一个排序的链表中,如何删除重复的结点?例如,在图3.4(a)中重复 // 结点被删除之后,链表如图3.4(b)所示. #include &l ...
- 《程序员代码面试指南》第二章 链表问题 在单链表和双链表中删除倒数第K个节点
题目 在单链表和双链表中删除倒数第K个节点 java代码 /** * @Description:在单链表和双链表中删除倒数第K个节点 * @Author: lizhouwei * @CreateDat ...
- 删除链表中重复的结点——牛客剑指offer
题目描述: 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理 ...
随机推荐
- 【容斥、插值】P3270 [JLOI2016]成绩比较
[容斥.插值]P3270 [JLOI2016]成绩比较 题目简述 有 \(n+1\) 个人,进行 \(m\) 场考试,第 \(i\) 场考试的可能得分是 \([0,U_i]\) 之间的整数. 假设你是 ...
- Socket编程:htons()、htonl()、ntohs()、ntohl()
前言 在计算机网络学到Socket编程的时候,自己在Linux下用C语言试验了一番,发现了这四个古怪的函数:htons().htonl().ntohs().ntohl(). 查阅资料得知,这是涉及到网 ...
- dnsmasq 本地局域网DNS服务器搭建
项目背景 因为本地环境需要使用域名进行调试,需要DNS服务器 DNS 机器IP:192.168.5.249 dnsmasq 服务端部署 #01 关闭防火墙 systemctl stop firew ...
- dev-sidecar 让github 可以正常访问
dev-sidecar https://gitee.com/docmirror/dev-sidecar/releases
- 【算法】C和Python实现快速排序-三数中值划分选择主元(非随机)
一.快排基础 1.1 快排的流程 将数组A进行快速排序的基本步骤-quick_sort(A): 递归基础情况:如果A中的元素个数是1或0,则返回. 选取主元:取A中的任意一个元素v,作为主元(pivo ...
- kettle教程--通过配置文件同步所需要的列数据
kettle教程--通过配置文件同步所需要的列数据 欢迎关注博主公众号「Java大师」, 专注于分享Java领域干货文章, 关注回复「kettle」, 免费领取全网最热的kettle实战视频教程 ht ...
- 大年学习linux(第三节---用户管理)
三.用户管理 用户和用户组操作命令 ld Finger Pwck 检查/etc/passwd配置文件内的信息与实际主文件夹是否存在,还可比较/etc/passwd和/etc/shadow的信息是否一致 ...
- 崩溃bug日志总结1
目录介绍 1.1 java.lang.UnsatisfiedLinkError找不到so库异常 1.2 java.lang.IllegalStateException非法状态异常 1.3 androi ...
- 使用现代身份验证(OAuth)调用 EWS 服务
我的博客园:https://www.cnblogs.com/CQman/ 转载: https://mp.weixin.qq.com/s?__biz=MzU0MzUxMzU2NA==&mid=2 ...
- linux scp 学习
scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令, scp传输是加密的,可能会稍微影响一下速度.另外,scp还非常不占资源,不会提高多少系统负荷,在这一点上,rsync就 ...