首页 > 其他分享 >链表练习3

链表练习3

时间:2023-04-04 13:32:54浏览次数:39  
标签:LinkList 结点 int 练习 next 链表 data

已知整型链表,设计算法,在所有结点值为x的结点前插入结点值为y的结点,插入的结点个数通过函数值返回。

#include <stdio.h>
#include <stdlib.h>
typedef struct node{           //用Node代替struct node
    int a;
    struct node *next;
}Node,*LinkList;
LinkList create();
LinkList find_pre(LinkList h,int x);
int fun1(LinkList h,int x,int y,LinkList q);//声明函数
LinkList create(){
LinkList h,r,s;
h=(LinkList)malloc(sizeof(Node));      //设立头结点
r=h;
int a;
scanf("%d",&a);                        //先输入一次a
while(a!=1){                           //设立a!=1为循环结束条件
s=(LinkList)malloc(sizeof(Node));      //设立一个新的结点为存放数据和建立链表做准备
s->data=a;                             //把数据存放在s的data域中
r->next=s;                             //头指针的next域存放下一个结点的地址
r=s;                                   //r跟随s;
scanf("%d",&a);
}r->next=0;                            //尾结点的next域存放0;
return h;                              //返回头结点地址作为整个链表的地址
}
LinkList find_pre(LinkList h,int x){   //求前导
LinkList p=h->next,q=h;
while(p&&p->data!=x){
q=p;
p=p->next;                             //q永远指向p的前导
}return q;
}
int fun1(LinkList h,int x,int y,LinkList q){
LinkList p=h->next,s;
int count=0;
while(p){
if(p->data==x){
s=(LinkList)malloc(sizeof(Node));      //建立一个新的结点
s->data=y;
s->next=q->next;                       //让q的后继变成我的后继
q->next=s;                             //把我变成q的后继
count++;                               //计数
q=find_pre(p,x);
}p=p->next;                            //为下一次循环做准备
}return count;
}
int main(){
LinkList head,p,q;
head=create();
q=find_pre(head,5);
printf("%d\n",fun1(head,5,10,q));
for(p=head->next;p;p=p->next){         //此处不能使用p++
printf("%d",p->data);                  //遍历输出,查看链表是否正确
}return 0;
}

标签:LinkList,结点,int,练习,next,链表,data
From: https://blog.51cto.com/u_16036037/6168613

相关文章

  • 复杂链表的复刻
    暴力做法时间复杂度 O(n^2)遍历一遍,复制next指针,新建链表遍历第二遍,复制random指针,查找每一个random节点的位置classSolution{public:ListNode*copyRandomList(ListNode*head){ListNode*dummy=newListNode(-1),*tail=dummy;if(!hea......
  • 最长连续序列(并查集、数组)、复原 IP 地址(字符串、回溯)、删除链表的倒数第 N 个结
    最长连续序列(并查集、数组)给定一个未排序的整数数组nums,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为O(n)__的算法解决此问题。示例1:输入:nums=[100,4,200,1,3,2]输出:4解释:最长数字连续序列是[1,2,3,4]。它的长度为4......
  • 环形链表
    给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数pos来表示链表尾连接到链表中的位置(索引从0开始)。如果pos......
  • 带环的单链表追击之拓展证明
    对于单链表有环问题,上一期,我们已经详细讲解了!!而快慢指针功不可没!!对于本期我们再次回顾,链表有环问题时,不难心中存在一个疑问,一定能追得上吗?会不会错过??那么为什么??为何能追上,什么情况下会追不上!!这就是我们今天讨论的重点!!假设单链表有环,快指针每次走两步,而慢指针每次走一步!!那么,快慢指......
  • 23. 合并 K 个升序链表
    题目描述给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。解题1/**2*Definitionforsingly-linkedlist.3*publicclassListNode{4*intval;5*ListNodenext;6*ListNo......
  • 114.二叉树展开为链表 Java
    114.二叉树展开为链表给你二叉树的根结点root,请你将它展开为一个单链表:展开后的单链表应该同样使用TreeNode,其中right子指针指向链表中下一个结点,而左子指针始终为null。展开后的单链表应该与二叉树先序遍历顺序相同。示例1:输入:root=[1,2,5,3,4,null,6]输出......
  • C++ Primer 第五版 第十一章 练习题编程题目答案
    https://github.com/jzplp/Cpp-Primer-Answer练习11.1map用关键字索引,是一个字典。vector用整数索引,是一个列表。练习11.2list链表vector顺序列表deque双端队列map字典set集合练习11.311.3map单词计数程序代码练习11.411.4去标点map单词计数程序代码练习11.5如果关键......
  • 力扣---剑指 Offer 36. 二叉搜索树与双向链表
    输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。 为了让您更好地理解问题,以下面的二叉搜索树为例:   我们希望将这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针。对......
  • 数组练习1
    1、将密码文件的每一行作为元数赋值给数组  2、使用关联数组统计密码文件中用户使用的不同类型shell的数量   3、使用关联数组按扩展名统计指定目录中文件的数量  ......
  • hivesql练习_会话划分问题
    现有页面浏览记录表(page_view_events)如下,表中有每个用户的每次页面访问记录。user_idpage_idview_timestamp100home1659950435100good_search1659950446100good_list1659950457100home1659950541100good_detail1659950552100cart16599505631......