使用Java设计一个链表
- package link_list;
-
-
-
- public class Design_Link {
- public static void main(String[] args) {
- Design_Link demo = new Design_Link();
-
- Design_Link.myLinkedList myLink = new Design_Link().new myLinkedList();
- myLink.addHead(0);
- myLink.addIndex(1,1);
- myLink.addTail(2);
- myLink.addTail(2);
- myLink.printVal();
- myLink.get(1);
-
- }
- class ListNode{
- int val;
- ListNode next;
- public ListNode() {
-
- }
- public ListNode(int val) {
- this.val=val;
- }
- public ListNode(int val,ListNode linkNode) {
- this.val=val;
- this.next = linkNode;
- }
- }
- class myLinkedList{
- //记录链表大小
- int size;
- //虚拟头结点
- ListNode head;
- public myLinkedList(){
- size = 0;
- head = new ListNode(0,null);
- }
- //获取第index个结点的数值,注意index是从0开始的,第0个结点就是头结点。
- public void get(int index) {
- if(index<0||index>=size) {
- System.out.print("格式错误");
- }
- ListNode cur = head;
- //包含虚拟结点,所以查找第index+1个结点
- for(int i =0;i<=index;i++) {
- cur = cur.next;
- }
- System.out.println(cur.val);
- }
- // 在第 index 个节点之前插入一个新节点,例如index为0,那么新插入的节点为链表的新头节点。
- // 如果 index 等于链表的长度,则说明是新插入的节点为链表的尾结点
- // 如果 index 大于链表的长度,则返回空
- public void addIndex(int index,int val) {
- if(index<0) {
- index = 0;
- }else if(index>size) {
- return;
- }
- size++;
- //找到要插入的结点前驱动
- ListNode pred = head;
- for(int i =0;i
- pred = pred.next;
- }
- ListNode curAdd = new ListNode(val);
- curAdd.next = pred.next;
- pred.next= curAdd;
- }
- //插入最前面的节点,等价于在第0个元素添加
- public void addHead(int val) {
- addIndex(0,val);
- }
- //最后插入
- public void addTail(int val) {
- addIndex(size,val);
- }
-
- //删除第index个元素
- public void deleteIndex(int index) {
- if(index <0||index>=size) {
- return;
- }
- size--;
- ListNode pred = head;
- for(int i =0;i
- pred = pred.next;
- }
- pred.next = pred.next.next;
- }
- public void printVal() {
- ListNode cur = head.next;
- if(cur!=null) {
- for(int i=0;i
- System.out.print(cur.val+"\t");
- cur = cur.next;
- }
- }else {
- System.out.println("链表为空");
- }
-
- }
- }
- }
LeetCode206反转链表
- package link_list;
- public class Revert_Link {
- public ListNode revertLink(ListNode head) {
- ListNode pre = new ListNode();
- ListNode cur = head.next;
- ListNode temp = new ListNode();
- while(temp!=null){
- temp = cur.next;
- cur.next = pre;
- pre = cur;
- cur=temp;
- }
- return pre;
- }
- }
-
相关阅读:
单例模式五种写法
SQL——基础查询
Matlab|基于时间序列预测的粒子群优化混合非线性回归和自回归技术的比较
动环监控设备维护与故障处理,动环监控系统调试
计算机等级考试:信息安全技术 知识点十二
ZooKeeper的Linux端安装步骤(内含Java的Linux端安装)
腾讯云tca认证要具备哪些能力?腾讯云tca认证适合那些人群
阿里云CDN是什么意思?
Day 93
2022 7/5考试总结
-
原文地址:https://blog.csdn.net/weixin_47059164/article/details/134535853