在做这道题目之前,需要首先对链表有一些前提的知识,在这里做一个JavaScript有关于链表方面的补充。
首先需要清晰的是:
链表虽然看起来和数组很相似,但是链表和数组是不同的!!!不是一个数据结构!
链表元素在内存中的位置并不是连续的(数组是连续的存储),每个元素由一个存储元素本身的节点和一个指向下一个元素的引用(也称指针或链接)组成。
为了更方便的理解,下面是示例图:
(这是一个3元素的单链表)
因为这个特性,链表在删除,插入的时候是比数组要方便很多的!item保存数据,next保存着下一个链表的引用。
插入一个链表是比数组要轻松的,下面是示例图:
我们需要做的是将指定插入链表的位置的那个链表元素的next值指为需要插入元素的data值,而插入元素的next值指向插入元素的下一个元素的data值;
代码显示:
function insert ( newElement , item ) {
var newNode = new Node( newElement );
var currNode = this.find( item );
newNode.next = currNode.next;
currNode.next = newNode;
}
删除链表其实和插入链表是十分的相似的,所以只给一个示例图即可:
下面是题目描述:
给定一个已排序的链表的头 head
, 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。
示例图描述:
解题思路:
找到重复的元素
var deleteDuplicates = function(head) {
var fir=head
while(fir && fir.next){
if(fir.val ==fir.next.val){
fir.next=fir.next.next
}else{
fir=fir.next
}
}
return head
};