今日任务:
- 203.移除链表元素
- 删除头节点和其他节点不同,但是在链表前加一个统一的节点——虚拟头节点,那么链表中所有元素就可以用统一的方法删除。思路巧妙,代码写起来也比较简单了。
-
var removeElements = function(head, val) { let headerList = ListNode(0, head) let current = headerList while(current.next){ if(current.next.val === val){ current.next = current.next.next } current = current.next } return headerList.next };
- 707.设计链表
- 这个题要设计五个接口,比较综合
- get(index):获取链表中下标值为index 的节点的值。如果索引无效,则返回-1。
- 根据index的值做递减,然后current = current.next,就会得到下标值为index的节点
- addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点将成为链表的第一个节点。
- 需要验证链表是不是空链表,如果是空链表的话,那么!this._tail的值为真,往链表里添加的元素既是头元素,又是尾部元素
- addAtTail(val):将值为 val 的节点追加到链表的最后一个元素。
- 先让现存的尾节点指向新加入的节点,然后新加入的节点设置为尾节点
- 和addAtHead(val)一样,都要判断是不是空链表,如果是空链表,则需要首尾都指向新添加的节点
- addAtIndex(index, val)和deleteAtIndex(index)一样,都需要根据index找到对应的节点,然后获取上一个节点。
- get(index):获取链表中下标值为index 的节点的值。如果索引无效,则返回-1。
- 这个题要设计五个接口,比较综合
- 206.反转链表
- 先把当前节点的下一个节点记录下来,然后然后把当前节点的next换做前一个节点,进行链表反向连接,最后当前节点又是下一个节点的next。比较简单。