自学Java之LinkedList

mac2024-08-14  61

从头开始学Java数据结构和算法的第一天,希望能坚持下去...

LinkedList--《Java核心技术》之集合

集合类库:将接口(interface)与实现(implementation)分离

注:①Collection集中不能有重复的对象

②Java集合类库和其他类库的迭代器存在重要区别:

C++中,迭代器根据数组索引建模,可直接使用索引查看数组元素;不需查找,就可以移动迭代器。

Java中,查找操作与位置变更紧密关联,查找一个元素的唯一方法是调用next;在进行查找元素时,迭代器随之向前移动。

可以认为Java的迭代器位于两个元素之间

③add方法只依赖于迭代器的位置,而remove方法依赖于迭代器的状态(调用next或previous)。

官网方法

https://docs.oracle.com/javase/7/docs/api/java/util/LinkedList.html?is-external=true

程序清单9-1

import java.util.*; public class LinkedListTest { public static void main(String[] args) { // TODO Auto-generated method stub List<String> a=new LinkedList<>(); a.add("Amy"); a.add("Carl"); a.add("Erica"); List<String> b=new LinkedList<>(); b.add("Bob"); b.add("Doug"); b.add("Frances"); b.add("Gloria"); ListIterator<String> aIter=a.listIterator(); Iterator<String> bIter=b.iterator(); while(bIter.hasNext()) { if(aIter.hasNext()) aIter.next(); aIter.add(bIter.next()); } System.out.println(a); bIter=b.iterator(); while(bIter.hasNext()) { if(bIter.hasNext()) { bIter.next(); bIter.remove(); } } System.out.println(b); a.removeAll(b);//从a中删去b中所有元素 System.out.println(a); } }

LeetCode · LinkedList

876. Middle of the Linked List

class Solution { public ListNode middleNode(ListNode head) { //arr traverses the whole ListNode. List<Integer> arr=new LinkedList<>(); arr.add(head.val); ListNode tmp=head.next; while(tmp!=null){ arr.add(tmp.val); tmp=tmp.next; } //get size. int LNnum=Math.round(arr.size()/2); //return newArr. ListNode newArr=head; for(int i=0;i<LNnum;i++) newArr=newArr.next; return newArr; } }

算是对今天刚看的LinkedList活学活用,比较顺利

21. Merge Two Sorted Lists

class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { ListNode l=new ListNode(0); ListNode tmp=l; if(l1==null) return l2; if(l2==null) return l1; while(l1!=null && l2!=null){ if(l1.val<=l2.val){ tmp.next=l1; l1=l1.next; } else{ tmp.next=l2; l2=l2.next; } tmp=tmp.next; } if(l1!=null){ tmp.next=l1; } else{ tmp.next=l2; } return l.next; } }

发现链表的使用忘差不多了,思路有点混乱;

好在整体上出入不大,细节也有考虑到。

206. Reverse Linked List

class Solution { public ListNode reverseList(ListNode head) { ListNode prev=head; if(prev==null){//空 return null; } ListNode cur=prev.next; if(cur==null){//单个元素 return prev; } ListNode next=cur.next; prev.next=null; if(next==null){//两个元素 cur.next=prev; return cur; } while(next.next!=null){ cur.next=prev; prev=cur; cur=next; next=next.next; } next.next=cur; cur.next=prev; head=next; return head; } }

仍然比较混乱,要好好消化倒置等基本的链表操作;

考虑到了链表只有1/2个元素,却没有考虑到空链表的情况...

收获

1.Java中对列表元素默认为随机数

2.打印输出

System.out.println(arr);

3.定义整型的列表集合

List<Integer>

4.四舍五入

Math.round()

5.|,||

||和|都是表示“或”,区别是||只要满足第一个条件,后面的条件就不再判断,而|要对所有的条件进行判断。

来自 <https://zhidao.baidu.com/question/95603837.html>

6.iterator,listIterator

同:都有hasNext()和next()方法,可以实现顺序向后遍历

都可删除对象

异:ListIterator有hasPrevious()和previous()方法,可以实现逆向(顺序向前)遍历。Iterator就不可以

ListIterator有add()方法,可以向List中插入对象;Iterator不能

ListIterator可以通过set()方法实现对象的修改;Iterator仅能遍历,不能修改

https://blog.csdn.net/qq_34626097/article/details/83759451

最新回复(0)