题目:求链表的中间结点。如果链表中结点总数为奇数,返回中间结点;如果结点总数是偶数,返回中间两个结点的任意一个。 解析:我们可以定义两个指针,同时从链表的头结点出发,第一指针一次走一步,第二个指针一次走两步,当第二个指针走到链表的末尾时,第一指针正好在链表的中间。以下代码是:如果结点的总数为偶数,我们返回中间结点的后一个结点。如果结点的总数是偶数,我们返回中间结点的前一个结点。//找到链表中间结点 ListNode * findMidVal(ListNode *pHead) { if(pHead == NULL) return NULL; ListNode *p1 = pHead; ListNode *p2 = pHead; while(p2->next) { p1 = p1->next; p2 = p2->next; if(p2->next) { p2 = p2->next; } } return p1; }
//找到链表中间结点 ListNode * findMidVal(ListNode *pHead) { if(pHead == NULL) return NULL; ListNode *p1 = pHead; ListNode *p2 = pHead; while(p2->next) { p2 = p2->next; if(!p2->next) { break; } p2 = p2->next; p1 = p1->next; } return p1; }
求链表中间结点
最新推荐文章于 2024-05-09 00:51:55 发布