前言:线性表是常用的数据结构,数组和链表都属于线性表,不同的是数组是顺序存储结构,链表是链式存储结构,本博客主要记录数组和链表这两种数据结构的学习。
目录
思维导图
关于上面的思维导图,具体知识点,下面的这篇文章介绍的很详细,不再赘述。
力扣344反转数组
class Solution(object):
def reverseString(self, s):
left = 0
right = len(s)-1
while left < right:
s[left],s[right] = s[right],s[left]
left += 1
right -= 1
s[left],s[right] = s[right],s[left]
这行代码,表示前后两个元素交换
只有python可以这样写
力扣206 反转链表
解题思路:
用双指针实现
链表尾节点是None,反转后头节点就是None
先定义一个prev指针指向None,cur指针指向当前头节点 -->prev=None cur=head
节点的反转过程:
当前节点下一个节点需要存储起来,给一个临时变量temp -->temp=cur.next
将当前节点的下一个节点反过来,指向前一个节点 -->prev=cur.next
往前走,prev向前移动,等于当前节点的值-->prev=cur
当前节点往前移动,等于刚存储的临时变量的值-->cur=temp
循环条件是cur不为None,为None说明走到头了-->while cur!=None
需要注意的点:
cur.next=prev
这行代码是链表在做反转,当前节点的下一个节点指向前一个节点
只不过此时还没进行赋值操作,其实是将当前节点cur的值赋给prev,cur.next的值赋给cur
解题代码:
class Solution(object):
def reverseList(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
prev=None
cur=head
while cur:
temp = cur.next
cur.next=prev
prev=cur
cur=temp
return prev
力扣24 两两交换链表中的节点
class Solution(object):
def swapPairs(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
pre,pre.next=self,head
while pre.next and pre.next.next:
a=pre.next
b=a.next
pre.next,b.next,a.next=b,a,b.next
pre=a
return self.next