数组&链表
1.反转链表
Question:反转一个单链表。
Input: 1->2->3->4->5->NULL
Output: 5->4->3->2->1->NULL
Code:
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def reverseList(self, head):
#定义两个指针,pre指向head,last为None
pre,last = head,None
#判断头节点是否为空
while pre:
#交换首尾两个结点的位置,并更新结点信息(指向下一个结点)
pre.next,last,pre = last,pre,last.next
#返回交换后的链表信息
return pre
2.两两交换链表中的节点
Question:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
Input: 1->2->3->4
Output: 2->1->4->3
Code:
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def swapPairs(self, head):
#pre为链表的实例对象,pre.next指向头节点
pre,pre.next = self,head
#判断相邻两个结点是否为空?
while pre.next and pre.next.next:
#用a,b分别存储pre.next,pre.next.next
a = pre.next
b= a.next
#交换相邻结点的next指针
pre.next,b.next,a.next=b,a,b.next
#更新链表的信息
pre=a
return self.next
3.判断链表是否有环?
Question:给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。
Input: head = [3,2,0,-4], pos = 1
Output: true
Code:
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def hasCycle(self, head):
#定义两个指针为快、慢指针,快指针一次走两步,慢指针一次走一步
fast = slow = head
#判断指针是否为空?
while slow and fast and fast.next:
slow = slow.next
fast = fast.next.next
#快慢指针若相遇,则判断出链表有环
if slow is fast:
return True
return False