网站注册哪个好,辽阳网站建设企业,好域名做网站,做网站开发工资怎样题目如下#xff1a; 给你单链表的头结点 head #xff0c;请你找出并返回链表的中间结点。
如果有两个中间结点#xff0c;则返回第二个中间结点。
示例 1#xff1a;
输入#xff1a;head [1,2,3,4,5] 输出#xff1a;[3,4,5] 解释#xff1a;链表只有一个中间结点…题目如下 给你单链表的头结点 head 请你找出并返回链表的中间结点。
如果有两个中间结点则返回第二个中间结点。
示例 1
输入head [1,2,3,4,5] 输出[3,4,5] 解释链表只有一个中间结点值为 3 。
示例 2
输入head [1,2,3,4,5,6] 输出[4,5,6] 解释该链表有两个中间结点值分别为 3 和 4 返回第二个结点。
结构体定义
typedef struct Node {
char val;
struct Node* next;
}Node;
typedef Node* List;文章目录 第一部分第二部分 第一部分
List head, tail;
Node* p;
p (Node*)malloc(sizeof(struct Node));
int ch, val,n0,i;
head p;
tail p;
head-next NULL;
printf(请输入链表的内容);
while ((ch getchar()) ! \n) {if (ch ) {continue;}p (Node*)malloc(sizeof(struct Node));p-val ch-48;tail-next p;tail p;tail-next NULL;n 1;
}这一部分我们主要是进行输入n变量是用来记录我们的链表长度方便我们接下来查找节点i 则是用来表示在哪一个节点。
第二部分
if ((n-1) % 2 0) {i (n-1) / 2;for (int sum 0; sum i; sum) {head head-next;}while (head-next ! NULL) {head head-next;printf(%d, head-val);}
}
if ((n - 1) % 2 ! 0) {i (n - 1) / 2 1;for (int sum 0; sum i; sum) {head head-next;}while (head-next ! NULL) {head head-next;printf(%d, head-val);}
}
return 0;这里使用n-1是因为n记录的链表长度如果我们要用其表示具体节点因为head初始并不是指向第一个节点的比如n是3我们要找第二个节点如果这时用n直接除以2那么 i 是1只循环了一次这时head指向的是第一个节点不是我们要的第二个节点所以我们需要用n-1/2这个操作。 当for循环结束后head已经指向我们需要的节点了那么这时我们只需要用一个while循环逐渐打印head-val的值就可以了。
至此代码讲解结束