赞
踩
#定义单链表节点 class ListNode: def __init__(self,x): self.val=x self.next=None #根据数组创建一个单链表 def creat_ListNode(nums): head=pre=ListNode(nums[0]) for num in nums[1:]: pre.next=ListNode(num) pre=pre.next return head #将链表输出为数组 def print_ListNode(head): list_node=[] while head: list_node.append(head.val) head=head.next return list_node
# 反转一个单链表 # 输入: 1->2->3->4->5->NULL # 输出: 5->4->3->2->1->NULL #定义单链表节点 class ListNode: def __init__(self,x): self.val=x self.next=None #反转链表:双指针迭代 def reverse_ListNode(head): if not head: return pre,cur=None,head while cur: tmp=cur.next cur.next=pre pre=pre.next cur=tmp return pre #递归 def recursion_reverse(head): #递归终止条件 if not head or not head.next: return head #此时的cur为最后一个节点 cur=self.recursion_reverse(head.next) #翻转当前节点 head.next.next=head # 防止链表循环,将head.next设为空 head.next=None #每次递归返回最后一个节点 return cur
#创建一个带环的链表 class ListNode: def __init__(self,x): self.val=x self.next=None head = ListNode(0) p1 = ListNode(1) p2 = ListNode(2) p3 = ListNode(3) p4 = ListNode(4) p5 = ListNode(5) head.next = p1 p1.next = p2 p2.next = p3 p3.next = p4 p4.next = p5 p5.next = p2
def exit_loop(head):
#定义两个指针
fast=slow=head
while fast.next.next and slow,next:
fast=fast.next.next
slow=slow.next
if fast==slow:
return True
return False
def start_loop(head):
fast=slow=head
while fast.next.next and slow.next:
fast=fast.next.next
slow=slow.next
#找到第一次相遇点
if fast==slow:
break
#一个指针从起点出发,另一个从相遇点出发
fast=head
while fast.next and slow.next:
fast,slow=fast.next,slow.next
if fast==slow:
return slow.val
def remove_node(head,val):
if not head:
return head
if head.val==val:
return head.next
pre,cur=head,head.next
#找到删除节点的位置(cur指针所指的位置)
while cur and cur.val!=val:
pre,cur=pre.next,cur.next
#在遍历链表结束前,找到删除位置
if cur:
pre.next=cur.next
return head
def remove_repeat(head):
if not head:
return head
pre,post=head,head.next
while post:
#若两指针节点值相等,删除
if pre.val==post.val:
pre.next=post.next
post=post.next
#不相等,两指针分别后移
else:
pre,post=pre.next,post.next
return head
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。