链表是一种数据结构,一般来说是这么定义的:
public class LinkedList(int value)
{
public LinkedList? Next { get; set; }
public int Value { get; set; } = value;
}这种是单链表,还可以搞成双链表:
public class LinkedList(int value)
{
public LinkedList? Next { get; set; }
public LinkedList? Pre { get; set; }
public int Value { get; set; } = value;
}这种数据结构写起来蛮简单。先来点题:
删除链表
题意:删除链表中等于给定值 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 输出:[] 这里的话我们使用单链表。当value等于相应数的时候,把这个的实例忽略就行,也就是:a.Next = a.Next.Next 但是这里有个问题,就是我们无法判断a是不是这种的。而且因为C#引用类型的原因,我们要想输出头就只能使用最开始给的那个。所有我们首先得先变一下头,把head做个判断。 因此代码就长这样的了:
public static void Remove(LinkedList? head, int val)
{
while (head != null && head.Value == val)
{
head = head.Next;
}
var a = head;
while (a != null)
{
if (a.Next?.Value == val)
{
a.Next = a.Next.Next;
}
a = a.Next;
}
Console.WriteLine(head);
}