一、链表问题基础
移动:head=head.next
移动到最后:head.next=null
停止:if not xx: 相当于if not null:
取值:a.val
赋值:b.next=a
遍历:while head:
head=head.next
或者:
if not head:
head=head.next
递归:单链表:
def func(pre,cur):
return func(pre.next,cur.next)
双链表:
def func(l1,l2):
return func(l1.next,l2.next)
保存:借用其他容器,如array,set,哑节点来存放链表的值
二、反转链表
1 题目
2 解题思路
使用pre,cur两个迭代器,curr用来遍历当前链表,pre逐步赋值,用来生成反转后的链表。使用递归的方式,递归停止条件为:cur迭代器移动来了链表末尾,
即
#cur用来迭代当前链表
#pre用来生成反转链表
if not cur:
return pre
3 code
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution(object):
def reverseList(self, head):
def rec(pre,curr):
if not curr:
return pre
next_node=curr.next
curr.next = pre
return rec(curr,next_node)
return rec(None,head)