C语言题目
蔡泽基✔℡
不积跬步,无以至千里
展开
-
删除链表重复的元素
删除链表重复的元素要求:存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中没有重复出现的数字。如:/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode* deleteDuplicates(struct ListNod原创 2022-01-11 17:16:23 · 920 阅读 · 0 评论 -
判断链表中环的入口节点
判断链表中环的入口节点要求给定一个链表,返回链表开始入环的第一个节点。 从链表的头节点开始沿着 next 指针进入环的第一个节点为环的入口节点。如果链表无环,则返回 null。这个问题比较绕,原因是这是个数学循环问题,我们这里来做一个证明。假设链表全长为 m+n,其中 m 表示环入口之前的长度,n 表示环的长度,当两指针第一次相遇,这时候快指针一定已经饶了环一圈了,我们假设相遇的位置距离环入口k,此时有下列状态: distance(fast) = m + n + kdistance(slow) =原创 2021-12-18 23:45:13 · 614 阅读 · 0 评论 -
判断链表是否有环
判断链表是否有环要求给你一个链表的头节点 head ,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。主要思想是双指针,让一个每次指针走一步,一个指针每次走两步,如果有环,那两个指针会相遇,如果没有环,那就最后运动到最后为空。/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; *原创 2021-12-18 19:52:04 · 555 阅读 · 0 评论 -
斐波那契数列
斐波那契数列要求写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 2:输入:n = 5输出:5int fib(int n)原创 2021-12-18 16:41:00 · 350 阅读 · 0 评论 -
删除链表中重复的元素
删除链表中重复的元素存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中没有重复出现的数字。输入:head = [1,2,3,3,4,4,5]输出:[1,2,5]重复的都删除重点是:加入哑结点之后就可以使所有数据结点都有前驱结点,这样就会方便执行链表的一些操作struct ListNode* deleteDuplicates(struct ListNode* head){ if (!head) { //排除空链表的情况原创 2021-12-17 22:17:42 · 847 阅读 · 0 评论 -
反转单链表
反转链表给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]输入:head = []输出:[]反转链表的主要思想是:利用双指针,双指针一前一后,前面指针断开,指向新节点,然后移动双指针,以此往复直到遍历完链表。/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode原创 2021-12-09 23:12:35 · 189 阅读 · 0 评论 -
无头指针输入删除目标节点
无头指针删除链表中的节点要求:请编写一个函数,用于 删除单链表中某个特定节点 。在设计函数时需要注意,你无法访问链表的头节点 head ,只能直接访问 要被删除的节点 。题目数据保证需要删除的节点 不是末尾节点 。/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */void deleteNode(struct ListN原创 2021-12-08 19:26:58 · 120 阅读 · 0 评论 -
C语言删除链表的倒数第N个节点
C语言删除链表的倒数第N个节点要求:给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]解法:设置双指针,如果要删除第n个节点,就让一个指针比另外一个指针快n步/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */str原创 2021-12-08 19:17:13 · 1557 阅读 · 0 评论 -
循环移动数组
旋转数组给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。输入: nums = [1,2,3,4,5,6,7], k = 3输出: [5,6,7,1,2,3,4]解释:向右轮转 1 步: [7,1,2,3,4,5,6]向右轮转 2 步: [6,7,1,2,3,4,5]向右轮转 3 步: [5,6,7,1,2,3,4]解法如下:void rotate(int* nums, int numsSize, int k){int i,lenth;int temp[numsSi原创 2021-12-08 11:32:38 · 151 阅读 · 0 评论 -
反转整数方法
反转整数给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。示例 :输入:x = 123输出:321int reverse(long int x){ long b=1; long temp=1; long resut=0; while(b!=0) { temp=x%10; //从个位开始取数 resut=resut*10+temp; //将取出来的数逐个相加原创 2021-12-08 11:02:39 · 269 阅读 · 0 评论 -
反转字符串
反转字符串输入:s = [“h”,“e”,“l”,“l”,“o”]输出:[“o”,“l”,“l”,“e”,“h”]解法如下:利用双指针,两两对换void reverseString(char* s, int sSize){ int a,i; char temp; a=sSize-1; //数组从0开始,所以要减去1 /* sSize=sSize-1; if(sSize%2!=0) sSize=sSize+1; */ fo原创 2021-12-08 09:31:25 · 104 阅读 · 0 评论