自己想的笨蛋方法,新建一个链表,head循环不一样的记录到新链表。
var deleteDuplicates = function(head) {
if(head==null||head.next==null){return head;}
let node = new ListNode(null);
let p = node;
while(head!=null){
if(p.val !=head.val){p.next = head; p = p.next;console.log(p);}
else {
if(head.next==null){p.next = null}
}
head = head.next ;
}
return node.next;
};
想到了 ,每完全想对,可以让next=next.next移动后面的指针。但是为什么p的值改变,head也会变呢??????答:因为最后要返回链表头节点,p的作用相当于指针
var deleteDuplicates = function(head) {
let p = head;
while(p!=null&& p.next != null){
if(p.val!=p.next.val){
p = p.next;
}else{
p.next = p.next.next;
}
}
return head;
};
哈希表不行,哈希是存储相同指针,不是看是否相同数值。
var removeElements = function(head, val) {
if(head==null){return null}
let p = head;
while(p&&p.next){
if(p.next.val == val){
p.next = p.next.next;
}else{
p = p.next;
}
}
if(head.val == val){head = head.next;}
return head;
};
头节点是最后才考虑的,答案中表示可以先增加一个头节点。
11月24日链表提到此结束了。链表与数组结构不同,只能使用.next和.val,使用过的方法有哈希表法(判断相同指针而不是值);快慢指针法;递归法。
注意当前指针的copy与next的灵活运用。出现next判断是否为空。创建新节点的方法。