会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132390个问题
Python 全系列/第二阶段:Python 深入与提高/GUI编程(隐藏) 36557楼
Python 全系列/第二阶段:Python 深入与提高/GUI编程(隐藏) 36558楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/容器(旧) 36560楼
JAVA 全系列/(旧的隐藏)第十一阶段:spring全家桶(Spring Boot)/Spring Boot 36562楼
JAVA 全系列/第三阶段:数据库编程/Oracle 数据库的使用 36564楼
JAVA 全系列/(旧的隐藏)第十一阶段:spring全家桶(Spring Boot)/Spring Boot 36565楼
JAVA 全系列/(旧的隐藏)第八阶段:电商高级项目_架构/编码/电商ego-基于solr_实现商品数据检索 36566楼

老师关于add(int index,Object obj) 插入尾节点总覆盖,能不能帮我看一下,解释麻烦详细一点我基础不太好

package cn.sxt.mylinked;

import java.util.LinkedList;

//插入索引节点
public class MyLinked04 {
	Node first;// 第一个节点元素
	Node last;// 最后一个节点元素
	int size;// 大小
	// add

	public void add(Object object) {
		// 初始化node节点
		Node node = new Node(object);
		// 判断第一个节点是不是首节点,是则初始化
		if (first == null) {
			// first=null;
			// last=null;

			first = node;
			last = node;

		} else {
			// 新节点的前指针指向之前最后一个节点的数据域
			node.previous = last;
			// 新节点的后指针制空
			node.next = null;
			// 原先最后一个节点的最后指针域指向新节点的数据域
			last.next = node;
			// last后移一位,新节点变成last最后一个节点
			last = node;
		}
		// 添加方法后元素大小加1
		size++;
	}

	// remove方法
	public void remove(int index) {
		Node temp = getNode(index);
		// 获取该节点的前一个节点
		Node up = temp.previous;
		// 获取该节点的后一个节点
		Node down = temp.next;
		// 若前节点非空执行,不然会报空指针异常
		if (up != null) {
			up.next = down;
		}
		// 若后节点非空执行,不然会报空指针异常
		if (down != null) {
			down.previous = up;
		}
		// 若前节点为空
		if (up == null) {// index==0
			// 将first指向第二个节点,size-1
			first = down;
			size--;
		}
		// 若后节点为空
		if (down == null) {// index==size-1
			last = temp;
			size--;
		}

	}

	// get方法
	public Object get(int index) {
		// 索引判断
		if (index < 0 || index > size - 1) {
			throw new RuntimeException("索引越界:" + index);
		}

		/*
		 * //定义临时节点 Node temp=first; for(int i=0;i<index;i++) {
		 * //如果不进行index判断,则index超出范围后,temp=null,temp.next就空指针异常(null调用了方法)
		 * temp=temp.next; } return temp.element;
		 */
		// 对注释优化:提高查找效率
		Node temp = getNode(index);
		return temp.element;
	}

	private Node getNode(int index) {
		Node temp = null;
		if (index <= (size >> 1)) {// 前部分
			temp = first;
			for (int i = 0; i < index; i++) {
				temp = temp.next;
			}
		} else {// 后部分
			temp = last;
			// 从后往前找
			for (int i = size - 1; i > index; i--) {
				temp = temp.previous;
			}
		}
		return temp;
	}

	// toString方法重新写
	@Override
	public String toString() {
		// 创建StringBuilder对象进行字符串拼接
		StringBuilder sb = new StringBuilder("[");
		// 临时节点
		Node temp = first;
		while (temp != null) {
			sb.append(temp.element + ",");
			// 寻找下一个节点
			temp = temp.next;
		}
		// 将最后一个,改成]
		sb.setCharAt(sb.length() - 1, ']');

		// 返回字符串
		return sb.toString();
	}

	// get(int index,Object obj)
	public void add(int index, Object object) {
		// 创建新节点
		Node newNode = new Node(object);
		// 获取index位置的节点
		Node node = getNode(index);
		if (node != null) {
			// 非首节点
			if (node.previous != null) {
				Node preNode = node.previous;
				preNode.next = newNode;
				newNode.previous = preNode;
				node.previous = newNode;
				newNode.next = node;
			}
			// 首节点
			if (index==0) {
				
				newNode.previous = null;
				newNode.next = node;
				node.previous = newNode;
				first=newNode;
				//System.out.println(size);
				// System.out.println(newNode);
			}
			//尾节点
			if(index!=size-1) {
				//newNod:胡歌   node:古天乐(前)
				
				newNode.previous = last;
				newNode.next=null;
				last.next = newNode;
				last=newNode;
				
			}
		}
	}

	// main
	public static void main(String[] args) {
		MyLinked04 myLinked = new MyLinked04();
		System.out.println("添加方法:");
		myLinked.add("欧阳娜娜");
		myLinked.add("李沁");
		myLinked.add("古天乐");
		myLinked.add(3, "胡歌");
		System.out.println(myLinked);

	}
}


JAVA 全系列/第二阶段:JAVA 基础深化和提高/容器(旧) 36567楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/容器(旧) 36568楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/常用类 36570楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637