class ListNode:
def __init__(self, val):
self.val = val
self.next = None
############### 链表反转 ############################################
def main():
nums = [1, 2, 4, 6, 7]
head = tmp = ListNode(nums[0])
for i in nums[1:]:
tmp.next = ListNode(i)
tmp = tmp.next
print(head)
res = reverse_list(head)
while res:
print(res.val)
res = res.next
def reverse_list(head: ListNode):
pre = None
cur = head
while cur:
next_node = cur.next
cur.next = pre
cur, pre = next_node, cur
return pre
def reverse_list1(head):
stack = []
while head:
stack.append(head)
head = head.next
if len(stack) == 0:
return None
res = tmp = stack.pop()
while len(stack) != 0:
tmp.next = stack.pop()
tmp = tmp.next
tmp.next = None
return res
##################### 合并俩个排序链表 ############################################
def merge(l1: ListNode, l2: ListNode):
result = tmp = ListNode(-1)
while l1 and l2:
if l1.val <= l2.val:
tmp.next = l1
l1 = l1.next
else:
tmp.next = l2
l2 = l2.next
tmp = tmp.next
tmp.next = l1 if l1 else l2
return result.next
def merge1(l1: ListNode, l2: ListNode):
if not l1 or not l2:
return l1 if l1 else l2
if l1.val <= l2.val:
l1.next = merge1(l1.next, l2)
return l1
else:
l2.next = merge1(l2.next, l1)
return l2
############## 删除链表节点 ##########################
def delete_node(head: ListNode, val):
res = tmp = ListNode(-1)
while head:
if head.val == val:
continue
else:
tmp.next = head
head = head.next
return res.next
######################### 删除链表中重复的结点 ###########################
def delete_duplication(head: ListNode):
res = pre = ListNode(-1)
tmp = head
node_map = dict()
while head:
if head.val not in node_map:
node_map[head.val] = 1
else:
node_map[head.val] += 1
head = head.next
while tmp:
if node_map[tmp.val] != 1:
continue
else:
pre.next = tmp
tmp = tmp.next
return res
if __name__ == '__main__':
main()