图片引用自慕课网,下面我自己实现了一个简单链表
实现
代码语言:javascript复制class LinkedList<E>
{
private class Node
{
public E e;
public Node next;
public Node(E e,Node next)
{
this.e = e;
this.next = next;
}
public Node(E e) : this(e, null)
{
}
public Node() : this(default(E), null)
{
}
public override string ToString()
{
return e.ToString();
}
}
private Node head;
private int size;
public LinkedList()
{
head = null;
size = 0;
}
public int getSize()
{
return size;
}
public bool isEmpty()
{
return size == 0;
}
//在链表头添加新的元素e
public void addFirst(E e)
{
Node node = new Node(e);
node.next = head;
head = node;
//head = new Node(e, head);
size ;
}
//在链表的index位置添加新的元素e
public void add(int index,E e)
{
if (index < 0 || index > size)
throw new ArgumentException("Add failed. Illegal index.");
if (index == 0)
addFirst(e);
else
{
//找到索引位置的前一元素
Node prev = head;
for (int i = 0; i < index - 1; i )
prev = prev.next;
Node node = new Node(e);
node.next = prev.next;
prev.next = node;
prev.next = new Node(e, prev.next);
size ;
}
}
//在链表末尾添加新的元素e
public void addLast(E e)
{
add(size, e);
}
}
链表头添加元素
下面我针对添加元素做一个讲解,首先是在链表头添加元素。
在我们的链表头有头指针head指向头元素,现在需要在头元素之前添加元素,我们只需要将待添加元素node的next指针指向head,并将head指针指向node,这样就完成了头元素之前添加元素,即: 1.node.next=head; 2.head=node; 切记这两个的步骤的顺序不能改变,否则将没有意义。
链表任意位置添加元素
这个元素添加的目的是为了更好的理解链表的处理逻辑。
首先是通过遍历先找到需要插入位置的前一个元素,用prev指向他。下来操作就是待插入元素的next指向prev的next,之后perv的next指向node。 1.用prev指向index的前一元素; 2.node.next = prev.next; 3.prev.next=node;