首页 > 编程知识 正文

leetcode 758 C语言(leetcode 二叉树)

时间:2023-05-03 18:47:00 阅读:96984 作者:2659

强制按钮328。奇偶链表的强制按钮(点击查看标题)

标题描述

给定一个链表,所有奇数节点和偶数节点分别排列在一起。请注意,这里的奇数和偶数节点是指节点号的奇偶性,而不是节点值的奇偶性。

尝试使用就地算法完成。你的算法空间复杂度应该是O(1),时间复杂度应该是O(节点),节点就是节点总数。

示例1:

输入: 1-2-3-4-5-空。

输出: 1-3-5-2-4-空

示例2:

输入: 2-1-3-5-6-4-7-空。

输出: 2-3-6-7-1-5-4-空

描述:

奇数节点和偶数节点的相对顺序应该保持。链表的第一个节点被视为奇数节点,第二个节点被视为偶数节点,依此类推。

解决办法

Zydxh:分离节点后合并

如果链表为空,则直接返回链表。

对于原始链表,每个节点都是奇数节点或偶数节点。头节点为奇数节点,头节点后的节点为偶数节点,相邻节点的奇偶性不同。因此,奇数节点和偶数节点可以分为奇数链表和偶数链表,然后在奇数链表之后连接偶数链表,组合后的链表就是结果链表。

原始链表的头节点也是奇数链表的头节点和结果链表的头节点,头的下一个节点是偶数链表的头节点。让evenHead=head.next,那么evenHead就是偶数链表的头节点。

维护两个分别指向奇数节点和偶数节点的奇数和偶数指针。一开始,奇数=head,偶数=evenHead。奇数节点和偶数节点以迭代的方式被分成两个链表。在每个步骤中,先更新奇数节点,然后更新偶数节点。

当更新奇数节点时,奇数节点的下一个节点需要指向偶数节点的下一个节点,所以让奇数. next=偶数. next,然后让奇数=奇数. next,然后奇数变成偶数的下一个节点。当更新偶数节点时,偶数节点的下一个节点需要指向奇数节点的下一个节点,所以让偶数. next=奇数. next,然后让偶数=偶数. next,然后偶数变成奇数的下一个节点。在上述操作之后,完成了奇数节点和偶数节点的分离。重复上述操作,直到所有节点分离。所有节点分开的条件是偶数是空节点或偶数,下一个是空节点。此时,奇数指向最后一个奇数节点(即奇数链表的最后一个节点)。

最后,让odd.next=evenHead,在奇数链表之后连接偶数链表,即完成奇数链表和偶数链表的组合,链表的头节点仍然是Head。

Java 语言(一种计算机语言,尤用于创建网站)

解决方案类{

公共列表节点oddEvenList(列表节点头){ 0

if(head==null){ 0

返回头;

}

ListNode evenHead=head.next

ListNode奇数=head,偶数=evenHead

而(甚至!=null even.next!=null){ 0

奇数. next=偶数. next;

odd=odd.next

偶数. next=奇数. next;

偶数=偶数。

}

odd.next=evenHead

返回头;

}

}

Java Script语言

var oddEvenList=函数(head){ 0

if(head===null){ 0

返回头;

}

让evenHead=head.next

让奇数=头,偶数=偶数头;

而(甚至!==null even.next!==null){ 0

奇数. next=偶数. next;

odd=odd.next

偶数. next=奇数. next;

偶数=偶数。

}

odd.next=evenHead

返回头;

};

C

解决方案类{

公众号:

ListNode * Oddevenlist(ListNode * head){ 0

if(head==nullptr){ 0

返回头;

}

ListNode * even head=head-next;

ListNode * odd=head

ListNode * even=evenHead

而(甚至!=nullptr偶数-下一个!=nullptr){ 0

奇数-下一个=偶数-下一个;

奇数=奇数-下一个;

偶数-下一个=奇数-下一个;

偶数=偶数-下一个;

}

奇数-下一个=偶数头;

返回头;

}

};

Golang

func Oddevenlist(head * ListNode)* ListNode {

如果head==nil {

返回头

}

evenHead :=head .然后

奇数:=头

偶数:=偶数头

为了公平!=零偶数。下一个!=零

奇怪。下一个=偶数。然后

奇数=奇数。然后

甚至。下一个=奇数。然后

偶数=偶数。然后

}

奇怪下一个=偶数头

返回头

}

C

结构列表节点* oddEvenList(结构列表节点* head){ 0

if(head==NULL){ 0

返回头;

}

struct ListNode *偶数head=head-next;

结构列表节点*奇数=头

struct ListNode *偶数头=偶数头;

而(甚至!=空偶数-下一个!=空){ 0

奇数-下一个=偶数-下一个;

奇数=奇数-下一个;

偶数-下一个=奇数-下一个;

偶数=偶数-下一个;

}

奇数-下一个=偶数头;

返回头;

}

蟒蛇3

类别解决方案:

def oddEvenList(self,head : ListNode)-ListNode :

如果不是标题:

返回头

evenHead=head.next

奇数,偶数=头,偶数头

同时保持平稳

奇数。下一个=偶数。下一个

奇数=奇数。下一个

偶数。下一个=奇数。下一个

偶数=偶数。下一个

奇数。下一个=偶数头

返回头

复杂度分析

时间复杂度:O(n),其中n是链表的节点数。需要遍历链表中的每个节点,并更新指针。空间复杂度:第(1)款。只需要维护有限的指针。

本文作者:力扣

声明:本文归"力扣"版权所有,如需转载请联系。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。