wordpress 优化版,高端网站建设seo,wordpress主题不显示菜单,网络服务序、慢慢来才是最快的方法。
背景 链表(Linked List) 链表是一种常见的基础数据结构#xff0c;是一种线性表。与顺序表不同的是#xff0c;链表中的每个节点不是顺序存储的#xff0c;而是通过节点的指针域指向到下一个节点。 1.链表的优缺点 2.链表的类型
单链表、双链表…序、慢慢来才是最快的方法。
背景 链表(Linked List) 链表是一种常见的基础数据结构是一种线性表。与顺序表不同的是链表中的每个节点不是顺序存储的而是通过节点的指针域指向到下一个节点。 1.链表的优缺点 2.链表的类型
单链表、双链表、循环链表、静态链表。 1.单链表
element用来存放元素next用来指向下一个节点元素通过每个结点的指针指向下一个结点从而链接起来的结构最后一个节点的next指向null。 代码示例
//单向链表
class SingleLinkedList{//先初始化一个头节点, 头节点不要动, 不存放具体的数据private Node head new Node();//添加节点public void add(Node node){Node temp head;while (true){if(temp.next null){break;}temp temp.next;}temp.next node;}// 插入新节点到链表的头部 public void insertAtHead(String data) { Node newNode new Node(data); if (head ! null) { //新链表的next直接指向head即可。newNode.next head; } head newNode; } //删除节点public void del(String element) throws Exception {Node temp head;boolean flag false; // 标志是否找到待删除节点的while (true){if(temp.next null){//最后一个节点break;}if(temp.next.element element){flag true;break;}temp temp.next;}if(flag){temp.next temp.next.next;} else {throw new Exception(没有找到要删除的节点);}}//定义节点class Node{public String element;//用来存放元素public Node next; //指向下一个节点public Node(String element) {super();this.element element;}}
}单链表反转
反转链表问题在面试中出现频率 非常非常高相信有过几次面试经验的同学都会同意这个观点。
解法1递归 //递归解法private Node reversetList(Node node) {if (node null || node.next null) {return head;}Node nodePre reversetList(node);node.next.next node.next;node.next null;return nodePre;}
解法2迭代 //单链表反转 迭代private Node reversetList1(Node node) {//如果当前链表为null或者只有一个节点则无需反转if (node null node.next null) {return node;}//定义一个辅助的指针(变量)帮助我们遍历原来的链表Node cur node.next;Node next null;// 指向当前节点[cur]的下一个节点Node reverseNode new Node();while (cur ! null) {next cur.next;//先暂时保存当前节点的下一个节点因为后面需要使用cur.next reverseNode.next;///将cur 的下一个节点指向新的链表的最前端reverseNode cur;将cur 连接到新的链表上cur next;//让cur 后移}return reverseNode;} 2.双链表 单向链表的好处很多虽然单链表能 100% 解决逻辑关系为 一对一 数据的存储问题但在解决某些特殊问题时单链表并不是效率最优的存储结构。比如说如果算法中需要大量地找某指定结点的前趋结点使用单链表无疑是灾难性的因为单链表更适合 从前往后 找而 从后往前 找并不是它的强项因此我们就有了双向链表这个东西双向链表顾名思义就是链表的高级版他与单向链表有所不同的一点在于在具有尾巴结点并且双向链表的每一个结点都会有两个指向一个指向前面的结点一个指向后面的结点当然头结点的前端指向为null后结点的后端指向为null。 element、pre、next 跟前面的一样。
第一个节点的pre指向最后一个节点最后一个节点的next指向第一个节点形成一个环。 代码示例
public ListNode head;public ListNode last;public TowWayNodeList(int num){this.head new ListNode(num);this.last this.head;}//头插法public void addFirst(int num){ListNode node new ListNode(num);if(head null){this.head node;this.last node;}else{node.next this.head;this.head.prev node;this.head node;}}//尾插发
public void addLast(int data){ListNode node new ListNode(data);if(head null){this.head node;this.last node;}else{this.last.next node;node.prev this.last;this.last node;}} 参考
数据结构与算法 #1 链表问题总结 - 掘金
leetcode 206 号算法题反转单链表【数据结构与算法】_哔哩哔哩_bilibili
力扣LeetCode官网 - 全球极客挚爱的技术成长平台
Java实现双向链表_双向链表java实现_跑不死的程序员的博客-CSDN博客