自学Java之LinkedList

从头开始学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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值