博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构与算法-链表
阅读量:7025 次
发布时间:2019-06-28

本文共 2581 字,大约阅读时间需要 8 分钟。

链表

链表是面试时被提及最频繁的数据结构。链表就是通过指针将一个个节点连接起来。链表是非连续的动态内存空间,链表的查找比数组慢,但是添加和删除比数组快。
链表声明

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

链表的添加

1 public void insertList(ListNode head, int val) { 2     ListNode tempNode = new ListNode(val); 3     if (head == null) { 4         head = tempNode; 5     }else { 6         ListNode p = head; 7         while (p.next != null) { 8             p = p.next; 9         }10         p.next = tempNode;11     }12 }

链表的删除

1 public void deleteListNode(ListNode head, int val) { 2     if (head ==null) return;//为了鲁棒性 3     if (head.val == val) {
//头节点为要删除节点 4 head = head.next; 5 } else { 6 ListNode p = head; 7 //删除节点需要知道前一个节点,所以判断p.next.val是不是和目标相等 8 while (p.next !=null && p.next.val != val) { 9 p = p.next;10 }11 if (p.next !=null) {12 p.next = p.next.next;//删除节点13 }14 }15 }

从尾到头打印链表

方法1:使用栈结构

1 public void printList1(ListNode head) { 2     if (head == null) return; 3     Stack
stack = new Stack
(); 4 ListNode p = head; 5 while (p != null) { 6 stack.push(p); 7 p = p.next; 8 } 9 while (!stack.isEmpty()) {10 p = stack.pop();11 System.out.print(p.val+" ");12 }13 }

 

方法2:递归

1 public void printList2 (ListNode head) {2     if (head != null) {3         if (head.next != null) {4             printList2(head.next);5         }6         System.out.print(head.val+" ");7     }8 }

注:递归的过程相当于栈。

反转单链表

1 public ListNode reverseList (ListNode head) { 2     ListNode pre = null; 3     ListNode next; 4     while (head != null) { 5         next = head.next; 6         head.next = pre; 7         pre = head; 8         head = next; 9     }10     return pre;11 }

反转双链表

1 public class DoubleNode { 2     public int val; 3     public DoubleNode pre; 4     public DoubleNode next; 5     public DoubleNode (int val){ 6         this.val=val; 7     } 8 } 9 public Node reverseList(Node head){10     DoubleNode pre=null;11     DoubleNode next=null;12     while(head!=null){13         //反转第一个节点14         next=head.next;//记录下一个节点15         head.next=pre;//反转当前节点:next指针指向上一个节点16         head.pre=next;//反转当前节点:pre指针指向下一个节点17         pre=head;//记录当前节点为下一个节点的pre18         head=next;//移动到下一个节点19     }20     return pre;//返回新头节点21 }

 

学习数据结构与算法的记录和整理,如有错误或意见请帮忙指出,以后会持续更新。。。。

参考书籍:
《程序员代码面试指南:IT名企算法与数据结构题目最优解》—左程云
《剑指Offer》 —何海涛

 

转载于:https://www.cnblogs.com/hiyoung/p/9687502.html

你可能感兴趣的文章
jquery相关
查看>>
IE6 PNG透明终极解决方案
查看>>
Java序列化与反序列化
查看>>
mysql 数据库热备恢复
查看>>
关于Android中Contact API的讲解
查看>>
JavaScript 构造函数的继承
查看>>
ae(ArcEngine) java swing开发入门系列(2):ae的类型转换和Proxy类说明
查看>>
怎样控制wordpress博客首页博文显示内容字数
查看>>
Oracle排名函数(Rank)实例详解
查看>>
由hadoop ipc启发,改写的流式RPC
查看>>
树莓派(raspberry)启用root账户
查看>>
Hadoop学习--fsimage镜像文件--day04
查看>>
IPv6系列-初学者的10个常见困扰
查看>>
通过QEMU-GuestAgent实现从外部注入写文件到KVM虚拟机内部
查看>>
linux ip配置
查看>>
Exchange 2016之启动Exchange EAC 性能控制台界面
查看>>
【Android开发】如何实现android和服务器长连接呢?推送消息的原理
查看>>
OpenCV 1.0 在VS2005中编译为静态库所需的设置
查看>>
oracle数据库表空间及权限调整示例
查看>>
漏桶算法 Leaky Bucket (令牌桶算法 Token Bucket)学习笔记
查看>>