强制按钮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)款。只需要维护有限的指针。
本文作者:力扣
声明:本文归"力扣"版权所有,如需转载请联系。