遍历

  1. class Node {
  2. constructor(value) {
  3. this.value = value;
  4. this.next = null;
  5. }
  6. }
  7. const a = new Node(1)
  8. const b = new Node(2)
  9. const c = new Node(3)
  10. const d = new Node(4)
  11. a.next = b;
  12. b.next = c;
  13. c.next = d;
  14. d.next = null;
  15. //遍历链表
  16. function each(result) {
  17. if (result == null) return;
  18. console.log(result.value);
  19. each(result.next)
  20. }
  21. each(a)

运行结果
image.png

逆置

正常的链表如图
image.png
逆置后的链表如图
image.png
代码如下

  1. class Node {
  2. constructor(value) {
  3. this.value = value;
  4. this.next = null;
  5. }
  6. }
  7. const a = new Node(1)
  8. const b = new Node(2)
  9. const c = new Node(3)
  10. const d = new Node(4)
  11. a.next = b;
  12. b.next = c;
  13. c.next = d;
  14. d.next = null;
  15. //遍历链表
  16. function each(result) {
  17. if (result == null) return;
  18. console.log(result.value);
  19. each(result.next)
  20. }
  21. // 链表的逆置
  22. function reverse(result){
  23. if(result.next.next == null){ //代表当前节点值倒数第二个
  24. result.next.next = result; // 将倒数第一个节点的next指向倒数第二个
  25. return result.next; // 将其返回
  26. }else{
  27. const value = reverse(result.next) // 接受返回后的数据
  28. result.next.next = result; // 将前一个的next指向自己
  29. result.next = null; // 将当前的next置空 // 如果不置空,当为第一节点时第一个会指向第一个节点,因为一开始第一个节点就指向第二节点
  30. return value;
  31. }
  32. }
  33. reverse(a)
  34. each(d)

里面使用啦递归,需要自己想想