作为要准备踏入码农行业的人来说,要准备校招,怎么能不去刷刷LeetCode呢?
234.回文链表
-
题目要求:
请判断一个链表是否为回文链表。 -
示例:
输入: 1->2
输出: false
输入: 1->2->2->1
输出: true
- 分析:
方法一:遍历整个链表将值存到一个列表中 然后反转列表判断是否相等
class Solution(object):
def isPalindrome(self, head):
lists=[]
while head is not None:
lists.append(head.val)
head =head.next
return lists==lists[::-1]
方法二:使用快慢指针:快指针一定会先到达顶端或者顶端的前一个(奇偶不一样),而此时的慢指针会移到中位数。我们将后半部分反转进行判断是否相等
class Solution(object):
def isPalindrome(self, head):
slow, fast = head, head
while fast and fast.next:
fast = fast.next.next
slow = slow.next
#如果链表是奇数个则上方的慢指针还未停留在中位数
if fast:
slow = slow.next
node =None
#将链表反转
while slow:
nextone=slow.next
slow.next =node
node=slow
slow=nextone
while node and head:
if node.val !=head.val:
return False
node =node.next
head=head.next
return True
237.删除链表中的结点
-
题目要求:
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。 -
示例:
输入: head = [4,5,1,9], node = 5
输出: [4,1,9]
解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.
输入: head = [4,5,1,9], node = 1
输出: [4,5,9]
解释: 给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表应变为 4 -> 5 -> 9.
- 分析:不用开下面的实列,因为你会被误解。看题目已经说明白了:只被给定要求被删除的节点。所以我们的参数就只有一个带删除的结点。所以只要把当前的node转换成node的下一个节点就可以了。
class Solution(object):
def deleteNode(self, node):
node.val = node.next.val;
node.next = node.next.next;