接下来我们来看链表题

206. 反转链表
反转一个单链表。

示例:

  1. 输入: 1->2->3->4->5->NULL
  2. 输出: 5->4->3->2->1->NULL

解题:
链表题需要我们设立更多的指针来保存我们当前操作的细节;
1.我们需要定义3个指针 pre,cur ,next,pre为当前链表的前一个节点默认为空,cur为链表的第一个指针, 下一个指针next 为 cur.next 因为有可能存在越界所以我们在存在cur的时候再去取next指针;
2.我们把next指针指向pre,pre指向当前cur指针,当前指针指向暂存的next,最后我们返回pre指针;

  1. var reverseList = function(head) {
  2. let pre = null
  3. let cur = head
  4. let next = null
  5. while(cur!=null){
  6. next = cur.next
  7. // 将当前节点指向pre
  8. cur.next = pre
  9. pre = cur
  10. cur = next
  11. }
  12. return pre
  13. };

203. 移除链表元素
删除链表中等于给定值 val 的所有节点。

示例:

  1. 输入: 1->2->6->3->4->5->6, val = 6
  2. 输出: 1->2->3->4->5

 

解题:
1.当前删除逻辑如上图,但需要注意的是我们删除链表第一个节点时,是不适用的,所以我们一般采用增加虚拟头节点的方式,

2.链表问题的令一个重要思想是明白js对象是引用类型  let a = {name: ‘1’} let b = a 时,修改b的属性(注意不是本身)时,数据a的值也会发生改变

  1. let a = {name:1}
  2. let b = a
  3. b.name = 2
  4. console.log(a) //输出 {name: 2}

3.我们循环cur.next的下一个指针 如果cur.next.val==val时,我们把cur.next = cur.next.next,最后返回list.next

 

  1. /**
  2. * Definition for singly-linked list.
  3. * function ListNode(val) {
  4. * this.val = val;
  5. * this.next = null;
  6. * }
  7. */
  8. /**
  9. * @param {ListNode} head
  10. * @param {number} val
  11. * @return {ListNode}
  12. */
  13. var removeElements = function(head, val) {
  14. let list = new ListNode(-1)
  15. list.next = head
  16. let cur = list
  17. while(cur.next!==null){
  18. if(cur.next.val==val){
  19. cur.next = cur.next.next
  20. }else {
  21. cur = cur.next
  22. }
  23. }
  24. return list.next
  25. };

 

版权声明:本文为kbnet原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/kbnet/p/13380976.html