线性链表的应用(奇偶链表的另一种形态)代码超级详细

mac2025-09-28  13

题目描述: 用随机函数生成10个3位整数(100~999),把这些整数存于单链表中,然后读入一个整数,以该值为基准把单链表分割为两部分,所有小于该值的结点排在大于或等于该值的结点之前。

题目分析: 这道题十分简单,实现的思路也非常简单

实现思路: 题目的意思其实是遍历一条链表,将链表分成以输入的median为标准的这种结构链表: 小于value的节点-> 大于value的节点。 这样的话、我们可以新定义两个头指针minlist和maxlist,分别连接小于median的节点和大于median的节点,然后遍历目的链表,将小于median的节点连接在minlist中,大于median的节点连接在maxlist后面,遍历完毕之后,将maxlist链表的头结点放在minlist链表的尾部,即可。

实现代码如下:

ListNode* ListNode::Min_Max(int median) { //我们先创建好一个用于存储最小值的链表头指针 ListNode* minList = new ListNode(-1); //存储最大值的链表头指针 ListNode* maxList = new ListNode(-1); //然后对初始链表进行遍历,将每一个节点的值和median进行比较,小于median就插入到minList链表中,否则就插入到maxList链表后 ListNode* p = this->next; while(p != NULL) { ListNode *pNext = p->next; if (p->value < median) { //小于输入的整数 p->next = minList->next; minList->next = p; } else{ //大于或者等于输入的整数 p->next = maxList->next; maxList->next = p; } p = pNext;//p向后移动一位 } //找到小于链表的最后一个节点并且保存起来 ListNode* lastMin = minList->next; while (lastMin != NULL) { if (lastMin->next == NULL) { //此时lastMin就是指向小于链表的末尾节点 lastMin->next = maxList->next;//链接两条链表 return minList; } lastMin = lastMin->next; } }
最新回复(0)