给你一个链表的头节点 head
。删除 链表的 中间节点 ,并返回修改后的链表的头节点 head
。
长度为 n
链表的中间节点是从头数起第 ⌊n / 2⌋
个节点(下标从 0 开始),其中 ⌊x⌋
表示小于或等于 x
的最大整数。
n
= 1
、2
、3
、4
和 5
的情况,中间节点的下标分别是 0
、1
、1
、2
和 2
。示例 1:
输入:head = [1,3,4,7,1,2,6] 输出:[1,3,4,1,2,6] 解释: 上图表示给出的链表。节点的下标分别标注在每个节点的下方。 由于 n = 7 ,值为 7 的节点 3 是中间节点,用红色标注。 返回结果为移除节点后的新链表。示例 2:
输入:head = [1,2,3,4] 输出:[1,2,4] 解释: 上图表示给出的链表。 对于 n = 4 ,值为 3 的节点 2 是中间节点,用红色标注。示例 3:
输入:head = [2,1] 输出:[2] 解释: 上图表示给出的链表。 对于 n = 2 ,值为 1 的节点 1 是中间节点,用红色标注。 值为 2 的节点 0 是移除节点 1 后剩下的唯一一个节点。
- class Solution(object):
- def deleteMiddle(self, head):
- """
- :type head: Optional[ListNode]
- :rtype: Optional[ListNode]
- """
- p1 = p2 = head = ListNode(0, head)
- while p2.next and p2.next.next:
- p1, p2 = p1.next, p2.next.next
- p1.next = p1.next.next
- return head.next
给定单链表的头节点 head
,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。
第一个节点的索引被认为是 奇数 , 第二个节点的索引为 偶数 ,以此类推。
请注意,偶数组和奇数组内部的相对顺序应该与输入时保持一致。
你必须在 O(1)
的额外空间复杂度和 O(n)
的时间复杂度下解决这个问题。
示例 1:
输入: head = [1,2,3,4,5] 输出: [1,3,5,2,4]
创建了三个辅助指针,一个纸箱当前要排序的结点,一个指向前面已经排好序的尾结点,一个指向已排序的奇数索引最后一个结点。
- # Definition for singly-linked list.
- # class ListNode(object):
- # def __init__(self, val=0, next=None):
- # self.val = val
- # self.next = next
- class Solution(object):
- def oddEvenList(self, head):
- """
- :type head: ListNode
- :rtype: ListNode
- """
- if not head or not head.next or not head.next.next: # 表中元素小于等于2 直接返回
- return head
- tail = head.next # 表尾
- oddtail = head # 奇数表尾
- i = 3
- cur = head.next.next # 前两个元素直接有序,从无序的第3个元素开始
- while cur != None:
- if i % 2 != 0: # 索引奇数
- tail.next = cur.next
- cur.next = oddtail.next
- oddtail.next = cur
- oddtail = cur
- cur = tail.next
- else:
- cur = cur.next
- tail = tail.next
- i += 1
- return head
-
-
-
给你单链表的头节点 head
,请你反转链表,并返回反转后的链表。
示例 1:
输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1]
- # Definition for singly-linked list.
- # class ListNode(object):
- # def __init__(self, val=0, next=None):
- # self.val = val
- # self.next = next
- class Solution(object):
- def reverseList(self, head):
- """
- :type head: ListNode
- :rtype: ListNode
- """
- head = ListNode(0, head)
- rehead = ListNode(0, None)
- cur = head.next
- # priCur = head
- while cur != None:
- priCur = cur
- priCur = priCur.next
- cur.next = rehead.next
- rehead.next = cur
- cur = priCur
- return rehead.next