文章目录
引言
链表基本操作类题目分为以下几种
- 删除链表中的节点
- 分隔链表
- 交换链表
- 旋转链表
- 链表排序—这一部分内容在排序部分汇总
1.删除链表中的节点
203. 移除链表元素
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
示例:
输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]
思路1:一个指针
如果只用一个指针遍历链表,我们会发现,当我们遍历到一个节点
cur.val == val
时,其实就无法删除这个节点了。所以如果想要删除某个节点,就必须找到这个节点的前一个节点cur.next.val == val
,把前一个节点的指针改变,即指向下下一个。这样即可完成原地移除链表元素。
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
class Solution:
def removeElements(self, head: ListNode, val: int) -> ListNode:
# 初始化一个虚拟头结点
dummy_head = ListNode(0)
# 虚拟头结点指向头结点
dummy_head.next = head
cur = dummy_head
while cur.next != None:
# 如果值相等,则将下一个节点跳过
if cur.next.val == val:
cur.next = cur.next.next
else:
# 值不等,则移动指针
cur = cur.next
# 循环结束时,cur指向最后一个节点
return dummy_head.next
思路2:二个指针
cur
指针用于判断当前元素与val的关系,pre
指针指向这个节点的前一个节点。
思路1与思路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: ListNode, val: int) -> ListNode:
dummy