目录
- 1. 题目:
- 2. 我的代码:
- 小结:
1. 题目:
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
示例 1:
输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]
示例 2:
输入:head = [], val = 1
输出:[]
示例 3:
输入:head = [7,7,7,7], val = 7
输出:[]
2. 我的代码:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def removeElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]:
pre_head = ListNode()
pre_head.next = head
# 开始位置
slow_i = pre_head
fast_i = pre_head.next
while fast_i:
if fast_i.val != val:
slow_i.next = fast_i
slow_i = slow_i.next
fast_i = fast_i.next
slow_i.next = None
return pre_head.next
这个与数组去除元素类似,唯一的区别在于链表节点会保留原来的链式关系,所以最后一个元素可能去除不了。在循环中,最后一个元素如果是和val一样,则不会让慢指针指向它。但是,就是刚才说的:链表节点会保留原来的链式关系。任然会保留最后一个是val的元素,所以,需要在循环结束后,将慢指针的新链表的最后一个节点设置为空slow_i.next = None
。
小结:
关注我给大家分享更多有趣的知识,以下是个人公众号,提供 ||代码兼职|| ||代码问题求解||
添加我的公众号即可: