大家好呀,今天我分享的代码时有关查找链表的中间节点代码,题目如下:
给一个链表 [1 , 2 , 3 , 4 ,5 ],请输出中间节节点的值,即3;对于[ 1 , 2 , 3 , 4 ] 这一类型链表。输出2,3 中的第二个节点 3。
对于这一题目,我的思路很简单,首先是遍历链表,求出链表的节点数,然后利用求出的节点数算出中间节点的位置,继续在链表中寻找。
#define _CRT_SECURE_NO_WARNINGS 1 #includetypedef struct ListNode { int val; struct ListNode * next; }Node;//创建一个结构体,存放单链表中结点的数据域和指针域 typedef struct ListNode * linklist; struct ListNode* middleNode(struct ListNode* head)//中间节点函数,返回链表的中间节点地址 { typedef struct ListNode* Node; Node curr = head; int quant = 0;//记录链表节点总数 int i = 0; while (curr->next)//算出链表总数 { curr = curr->next; quant++; } quant = quant / 2 + 1; for (i = 0; i next; } return head; } struct ListNode* Listinsert(linklist HeadNode, int e)//插入元素,创建一个单链表 { linklist p = (linklist)malloc(sizeof(Node)); p->val = e; HeadNode->next = p; p->next = NULL; return p; } int main() { int Nodequant = 0; int i = 0; linklist head = (linklist)malloc(sizeof(Node)); head->next = NULL; int data = 0; linklist p = head; printf("请输入你想输入节点数目>>"); scanf("%d", &Nodequant); printf("n"); for (i = 0; i >", i + 1); scanf("%d", &data); p = Listinsert(p, data); } linklist middlehead = middleNode(head); printf("n"); printf("中间节点>>%dn", middlehead->val); return 0; }
以上是我的思路,大家有更能节省空间、时间的算法可以一起分享。



