美文网首页
LeetCode 876.链表中间的结点

LeetCode 876.链表中间的结点

作者: 饼干不干 | 来源:发表于2019-06-23 23:52 被阅读0次

    给定一个带有头结点 head 的非空单链表,返回链表的中间结点。
    如果有两个中间结点,则返回第二个中间结点。

    示例 1:
    输入:[1,2,3,4,5]
    输出:此列表中的结点 3 (序列化形式:[3,4,5])
    返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。
    注意,我们返回了一个 ListNode 类型的对象 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]
    输出:此列表中的结点 4 (序列化形式:[4,5,6])
    由于该列表有两个中间结点,值分别为 3 和 4,我们返回第二个结点。
    

    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;
        }
    }
    

    相关文章

      网友评论

          本文标题:LeetCode 876.链表中间的结点

          本文链接:https://www.haomeiwen.com/subject/mejgqctx.html