网站挂载,制作百度移动网站模板,手工制作火箭,互助盘网站开发单向链表设计
package 日常Java程序测试.代码随想录.链表;public class __707设计链表__单向链表设计 {class MyLinkedList {//我们首先需要自己定义属性出来int val;MyLinkedList next;int size; //记录链表大小//MyLinkedList() 初始化 MyLinkedList 对象。public MyLinke…单向链表设计
package 日常Java程序测试.代码随想录.链表;public class __707设计链表__单向链表设计 {class MyLinkedList {//我们首先需要自己定义属性出来int val;MyLinkedList next;int size; //记录链表大小//MyLinkedList() 初始化 MyLinkedList 对象。public MyLinkedList() {size 0;val 0;next new MyLinkedList(0);}public MyLinkedList(int val) {this.val val;}//int get(int index) 获取链表中下标为 index 的节点的值。如果下标无效则返回 -1 。public int get(int index) {if (index 0||index size){return -1;}MyLinkedList curNode next;for (int i0;iindex;i){curNode curNode.next;}return curNode.val;}//void addAtHead(int val) 将一个值为 val 的节点插入到链表中第一个元素之前。在插入完成后新节点会成为链表的第一个节点。public void addAtHead(int val) {addAtIndex(0,val);}//void addAtTail(int val) 将一个值为 val 的节点追加到链表中作为链表的最后一个元素。public void addAtTail(int val) {addAtIndex(size,val);}//void addAtIndex(int index, int val) 将一个值为 val 的节点插入到链表中下标为 index 的节点之前。//如果 index 等于链表的长度那么该节点会被追加到链表的末尾。//如果 index 比长度更大该节点将 不会插入 到链表中。public void addAtIndex(int index, int val) {if (index size){return;}if (index 0){ //负值也认为插在了首位index 0;}size;MyLinkedList pred next;for (int i0;iindex;i){pred pred.next; //得有哨位结点}MyLinkedList toAdd new MyLinkedList(val);toAdd.next pred.next;pred.next toAdd;}//void deleteAtIndex(int index) 如果下标有效则删除链表中下标为 index 的节点。public void deleteAtIndex(int index) {if (index 0 || index size){return;}size--;if (index 0){ //负值认为在了首位index 0;}if (index 0){next next.next;return;}MyLinkedList pred next;for (int i0;iindex;i){pred pred.next;}pred.next pred.next.next;}}
}
双链表
//双链表
class ListNode{int val;ListNode next,prev;ListNode() {};ListNode(int val){this.val val;}
}class MyLinkedList { //记录链表中元素的数量int size;//记录链表的虚拟头结点和尾结点ListNode head,tail;public MyLinkedList() {//初始化操作this.size 0;this.head new ListNode(0);this.tail new ListNode(0);//这一步非常关键否则在加入头结点的操作中会出现null.next的错误head.nexttail;tail.prevhead;}public int get(int index) {//判断index是否有效if(index0 || indexsize){return -1;}ListNode cur this.head;//判断是哪一边遍历时间更短if(index size / 2){//tail开始cur tail;for(int i0; i size-index; i){cur cur.prev;}}else{for(int i0; i index; i){cur cur.next; }}return cur.val;}public void addAtHead(int val) {//等价于在第0个元素前添加addAtIndex(0,val);}public void addAtTail(int val) {//等价于在最后一个元素(null)前添加addAtIndex(size,val);}public void addAtIndex(int index, int val) {//index大于链表长度if(indexsize){return;}//index小于0if(index0){index 0;}size;//找到前驱ListNode pre this.head;for(int i0; iindex; i){pre pre.next;}//新建结点ListNode newNode new ListNode(val);newNode.next pre.next;pre.next.prev newNode;newNode.prev pre;pre.next newNode;}public void deleteAtIndex(int index) {//判断索引是否有效if(index0 || indexsize){return;}//删除操作size--;ListNode pre this.head;for(int i0; iindex; i){pre pre.next;}pre.next.next.prev pre;pre.next pre.next.next;}
}/*** Your MyLinkedList object will be instantiated and called as such:* MyLinkedList obj new MyLinkedList();* int param_1 obj.get(index);* obj.addAtHead(val);* obj.addAtTail(val);* obj.addAtIndex(index,val);* obj.deleteAtIndex(index);*/