赞
踩
从头开始学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
- 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);
- }
-
- }
- 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活学活用,比较顺利
- 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;
- }
- }
发现链表的使用忘差不多了,思路有点混乱;
好在整体上出入不大,细节也有考虑到。
- 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仅能遍历,不能修改
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。