程序员之所以犯错误,不是因为他们不懂,而是因为他们自以为什么都懂。
题目:将一句话反转
def reverse(str_list, start, end):
while start < end:
str_list[start], str_list[end] = str_list[end], str_list[start]
start += 1
end -= 1
setence = ' Hello, how are you? Fine. '
str_list = list(setence)
i = 0
while i < len(str_list):
if str_list[i] != ' ':
start = i
end = start + 1
while (end < len(str_list)) and str_list[end] != ' ':
end += 1
reverse(str_list, start, end - 1)
i = end
else:
i += 1
str_list.reverse()
print(''.join(str_list))
结果:
Fine. you? are how Hello,
整体的思路是这样的,先把字符串变成字符数组,然后把每个词都反转,最后把整句话反转,这样每个词的顺序又正过来了但是整个句子反过来了
看一下调转的顺序:
Hello, how are you? Fine.
,olleH how are you? Fine.
,olleH woh are you? Fine.
,olleH woh era you? Fine.
,olleH woh era ?uoy Fine.
,olleH woh era ?uoy .eniF
Fine. you? are how Hello,定义了一个reverse方法,传进去字符数组,起始点和终点会调转顺序,写了一个while循环,不断调换起始点和终点的字符直到起始点和终点重合
while (end < len(str_list)) and str_list[end] != ' ': end += 1这段代码是找单词的间隔的
class ListNode(object):
def __init__(self, val, next=None):
self.val = val
self.next = next
def display_list(head):
vals = []
while head:
vals.append(str(head.val))
head = head.next
print('->'.join(vals))
def reverse(head):
if not head:
return None
new_head = None
while head:
node = head
head = head.next
node.next = new_head
new_head = node
return new_head
l_5 = ListNode(5)
l_4 = ListNode(4, l_5)
l_3 = ListNode(3, l_4)
l_2 = ListNode(2, l_3)
l_1 = ListNode(1, l_2)
display_list(l_1)
display_list(reverse(l_1))
结果 :
1->2->3->4->5
5->4->3->2->1实现了一个类似链表的结构,首先构建节点,添加节点并把前面定义的节点作为当前节点的子节点,添加5个,顺序是
1,2,3,4,5,通过reverse方法反转链表
while head: node = head head = head.next node.next = new_head new_head = node这一块是核心,用node节点保存当前循环的节点,把当前节点的子节点赋值给当前节点,然后用ner_head节点作为node节点的子节点,用new_head节点保存node节点