剑指offer--day06

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

刷题平台:牛客网:https://www.nowcoder.com/ta/coding-interviews

参考:https://cuijiahua.com/

猜你喜欢

转载自www.cnblogs.com/WJZheng/p/11206385.html