LeetCode 876.鏈表中間的結(jié)點(diǎn)

給定一個(gè)帶有頭結(jié)點(diǎn) head 的非空單鏈表,返回鏈表的中間結(jié)點(diǎn)。
如果有兩個(gè)中間結(jié)點(diǎn),則返回第二個(gè)中間結(jié)點(diǎn)。

示例 1:
輸入:[1,2,3,4,5]
輸出:此列表中的結(jié)點(diǎn) 3 (序列化形式:[3,4,5])
返回的結(jié)點(diǎn)值為 3 。 (測評(píng)系統(tǒng)對(duì)該結(jié)點(diǎn)序列化表述是 [3,4,5])。
注意,我們返回了一個(gè) ListNode 類型的對(duì)象 ans,這樣:
ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, 以及 ans.next.next.next = NULL.
示例 2:
輸入:[1,2,3,4,5,6]
輸出:此列表中的結(jié)點(diǎn) 4 (序列化形式:[4,5,6])
由于該列表有兩個(gè)中間結(jié)點(diǎn),值分別為 3 和 4,我們返回第二個(gè)結(jié)點(diǎn)。

C++

class Solution {
public:
    ListNode* middleNode(ListNode* head) {
        ListNode *p=head,*r=head;
        int icount=0,flag=0;
        while(p){
            p=p->next;
            icount++;
        }
        if(icount%2==0){
            flag==1;
        }
        icount=icount/2;
        while(icount!=0){
            r=r->next;
            icount--;
        }
        if(flag==1)   
            return r->next;
        return r;
    }
};

另外還可以用快慢雙指針

class Solution {
    public ListNode middleNode(ListNode head) {
        if(head == null || head.next == null) return head;
        ListNode p = head;
        ListNode q = head;
        while(p != null && p.next != null){
            p = p.next.next;
            q = q.next;
        }
        return q;
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容