1.1 题目:调整数组顺序使奇数位语偶数前面:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
1.2 思路:首先,创建一个新的空间。其次,遍历array,从后向前遍历奇数,每次插入到列表的0位置,这样可以保证插入的奇数的相对顺序;从前向后遍历偶数,每次在列表的最后面添加。最后得到一个相对位置不变的前奇后偶的列表。
1.3 代码:
1 # -*- coding:utf-8 -*- 2 class Solution: 3 def reOrderArray(self, array): 4 # write code here 5 res = [] 6 length = len(array) 7 for i in range(length): 8 if array[length-i-1] % 2 != 0: 9 res.insert(0,array[length-i-1]) 10 if array[i] % 2 == 0: 11 res.append(array[i]) 12 return res
2.1 题目:链表中倒数第K个节点:输入一个链表,输出该链表中倒数第k个结点。
2.2 思路:
我们可以定义两个指针。第一个指针从链表的头指针开始遍历向前走k-1,第二个指针保持不动;从第k步开始,第二个指针也开始从链表的头指针开始遍历。由于两个指针的距离保持在k-1,当第一个(走在前面的)指针到达链表的尾结点时,第二个指针(走在后面的)指针正好是倒数第k个结点。
效果示意图,以链表总共6个结点,求倒数第3个结点为例:
2.3 代码:
1 # -*- coding:utf-8 -*- 2 # class ListNode: 3 # def __init__(self, x): 4 # self.val = x 5 # self.next = None 6 7 class Solution: 8 def FindKthToTail(self, head, k): 9 # write code here 10 if head == None or k == 0: 11 return None 12 phead = head 13 pbehead = head 14 for i in range(k-1): 15 if phead.next == None: 16 return None 17 else: 18 phead = phead.next 19 while phead.next != None: 20 phead = phead.next 21 pbehead = pbehead.next 22 return pbehead