【LeetCode】876. 連結串列的中間結點
阿新 • • 發佈:2018-12-19
給定一個帶有頭結點 head
的非空單鏈表,返回連結串列的中間結點。
如果有兩個中間結點,則返回第二個中間結點。
方法1:遍歷連結串列得到連結串列的長度,計算出中間節點的位置,再次從頭結點遍歷到中間節點的位置
ListNode* Solution::middleNode(ListNode* phead) { unsigned int length = 0; unsigned int index = 0; ListNode *plength = phead; ListNode *newhead = new ListNode(0); if((phead == NULL)||(phead->next == NULL)) { return phead; } while(plength != NULL) { plength = plength->next; length ++; } if(1u == length) { return phead; } else { ListNode *pmiddle = phead->next; for(index = 0; index < length / 2 ; index ++) { pmiddle = pmiddle->next; } newhead->next = pmiddle; return newhead; } }
2.利用快慢指標,一次遍歷中找到中間節點,需要注意的是:如果有兩個中間結點,則返回第二個中間結點。
ListNode* Solution::NewmiddleNode(ListNode* phead) { ListNode *pfast = phead; ListNode *pslow = phead; while((pfast->next != NULL) && (pfast->next->next != NULL)) { pslow = pslow->next; pfast = pfast->next->next; } if(pfast->next == NULL) { return pslow; } else { return pslow->next; } }