当前位置:   article > 正文

Java-数据结构-链表<一>_java 链表

java 链表

一. 链表简单介绍 

        链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)[1],通常链表的头被称为head,尾部一般用null表示。【图自[1]】

        链表的类型有单链表,双链表,循环链表等。数组是在内存中是连续分布的,但是链表在内存中可不是连续分布的。链表是通过指针域的指针链接在内存中各个节点。

二. 链表的代码实现

leetcode中对单向链表的典型实现

  1. public class ListNode {
  2. int val;
  3. ListNode next;
  4. ListNode() {}
  5. ListNode(int val) { this.val = val; }
  6. ListNode(int val, ListNode next) { this.val = val; this.next = next; }
  7. }

三. leetcode&牛客实例

1. leetcode206 && nowcoderBM1 反转链表

        给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]

(1)数组(list)方法:全部将值取出再重新赋值 

  1. class Solution {
  2. public ListNode reverseList(ListNode head) {
  3. //1.全部取值重新赋值
  4. return reverseList1(head);
  5. }
  6. public ListNode reverseList1(ListNode head){
  7. if(head == null) return null;
  8. LinkedList<Integer> list = new LinkedList<>();
  9. while(head != null){
  10. list.add(head.val);
  11. head = head.next;
  12. }
  13. ListNode new_head = new ListNode(list.removeLast());
  14. ListNode cur = new_head;
  15. ListNode temp;
  16. while(!list.isEmpty()){
  17. temp = new ListNode(list.removeLast());
  18. cur.next = temp;
  19. cur = temp;
  20. }
  21. return new_head;
  22. }
  23. }

(2)原地反转

        原地反转需要三个指针,三个指针在这里分别定义为tail,middle,pre。

  1. class Solution {
  2. public ListNode reverseList(ListNode head) {
  3. //2.原地反转
  4. return reverseList2(head);
  5. }
  6. public ListNode reverseList2(ListNode head){
  7. if(head == null) return null;
  8. ListNode tail = head;
  9. if(tail.next == null) return tail;
  10. ListNode middle = head.next;
  11. ListNode pre = middle.next;
  12. tail.next = null;
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/823007
推荐阅读
相关标签
  

闽ICP备14008679号