赞
踩
问题:
在尾插法创建链表时,找到最后一个结点,我感觉找到的是最后一个结点,但是提示空指针异常
题目链接:
LeetCode 707: 设计链表
我写的代码:
//单独设计一个头结点 class ListNode{ int val; ListNode next; public ListNode(int val){ this.val = val; } } class MyLinkedList { //定义链表的头结点和保存链表长度的整型变量 int size; ListNode head; public MyLinkedList() { //完成链表初始化 size = 0; head = new ListNode(0); } public int get(int index) { /* 判断索引是否有效 “假设链表中的所有节点都是 0-index 的”说明:链表中第一个结点对应的索引为零*/ if(index < 0 || index >= size){ return -1; } //遍历链表,找到索引index处链表的指针 ListNode current = head; for(int i = 0; i <= index; i++){ current = current.next; } return current.val; } /* 对于头插法创建链表和尾插法创建链表可以看成是对addAtIndex(index, val) 的特殊应用,所以设计好通用创建链表的方法直接调用即可,可以分别设计头插 法和尾插法,在addAtIndex方法中调用这两个方法也可以 */ public void addAtHead(int val) { //创建待插入的结点 ListNode node = new ListNode(val); //对于插入的结点要放在头结点与原有链表的中间 node.next = head.next; head.next = node; size++; } public void addAtTail(int val) { //创建待插入的结点 ListNode node = new ListNode(val); ListNode q = head; for(int i = 0; i < size; i++){ q = q.next; } node.next = q.next; //此处出现了空指针异常 q.next = node; size++; } public void addAtIndex(int index, int val) { if(index > size){ return; } if(index < 0){ addAtHead(val); }else if(index == size){ addAtTail(val); }else{ //插入到链表中的指定位置 ListNode node = new ListNode(val); ListNode p = head; for(int i = 0; i < index; i++){ p = p.next; } //当前p指向待插入位置的前一个结点 node.next = p.next; p.next = node; size++; } } public void deleteAtIndex(int index) { if(index < 0 || index >= size){ return; } ListNode p = head; for(int i = 0; i < index; i++){ p = p.next; } if(p.next != null){ p.next = p.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); */
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。