给定一个链表,对链表进行分隔,使得所有奇数都在单链表的左边,所有偶数都在单链表的右边。 //应当保留两个分区中每个结点的初始相对位置。示例:输入: head = 1->4->3->2->5->8。输出: 1->3->5->4->2->8。
时间: 2023-08-07 14:39:49 浏览: 88
yuesefu.rar_创建一个循环链表_按指定位置删除_循环单链表_约瑟夫环
好的,这是一道链表的题目,我会尽力回答你的问题。
首先,我们可以创建两个新链表,一个用于存放奇数结点,一个用于存放偶数结点。然后,我们遍历原链表,将奇数结点添加到奇数链表中,将偶数结点添加到偶数链表中。
最后,我们将奇数链表的尾结点指向偶数链表的头结点,这样就能保留两个分区中每个结点的初始相对位置。以下是具体的实现过程:
```python
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
def oddEvenList(head: ListNode) -> ListNode:
if not head:
return head
odd = head
even = head.next
even_head = even
while even and even.next:
odd.next = even.next
odd = odd.next
even.next = odd.next
even = even.next
odd.next = even_head
return head
```
这段代码的时间复杂度为 $O(n)$,其中 $n$ 是链表中结点的个数。
阅读全文