当前位置:   article > 正文

自学Java之LinkedList_arr.add(0,tmp.val);

arr.add(0,tmp.val);

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

  1. import java.util.*;
  2. public class LinkedListTest {
  3. public static void main(String[] args) {
  4. // TODO Auto-generated method stub
  5. List<String> a=new LinkedList<>();
  6. a.add("Amy");
  7. a.add("Carl");
  8. a.add("Erica");
  9. List<String> b=new LinkedList<>();
  10. b.add("Bob");
  11. b.add("Doug");
  12. b.add("Frances");
  13. b.add("Gloria");
  14. ListIterator<String> aIter=a.listIterator();
  15. Iterator<String> bIter=b.iterator();
  16. while(bIter.hasNext()) {
  17. if(aIter.hasNext())
  18. aIter.next();
  19. aIter.add(bIter.next());
  20. }
  21. System.out.println(a);
  22. bIter=b.iterator();
  23. while(bIter.hasNext()) {
  24. if(bIter.hasNext()) {
  25. bIter.next();
  26. bIter.remove();
  27. }
  28. }
  29. System.out.println(b);
  30. a.removeAll(b);//从a中删去b中所有元素
  31. System.out.println(a);
  32. }
  33. }

LeetCode · LinkedList

  • 876. Middle of the Linked List

  1. class Solution {
  2. public ListNode middleNode(ListNode head) {
  3. //arr traverses the whole ListNode.
  4. List<Integer> arr=new LinkedList<>();
  5. arr.add(head.val);
  6. ListNode tmp=head.next;
  7. while(tmp!=null){
  8. arr.add(tmp.val);
  9. tmp=tmp.next;
  10. }
  11. //get size.
  12. int LNnum=Math.round(arr.size()/2);
  13. //return newArr.
  14. ListNode newArr=head;
  15. for(int i=0;i<LNnum;i++)
  16. newArr=newArr.next;
  17. return newArr;
  18. }
  19. }

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

  • 21. Merge Two Sorted Lists

  1. class Solution {
  2. public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
  3. ListNode l=new ListNode(0);
  4. ListNode tmp=l;
  5. if(l1==null) return l2;
  6. if(l2==null) return l1;
  7. while(l1!=null && l2!=null){
  8. if(l1.val<=l2.val){
  9. tmp.next=l1;
  10. l1=l1.next;
  11. }
  12. else{
  13. tmp.next=l2;
  14. l2=l2.next;
  15. }
  16. tmp=tmp.next;
  17. }
  18. if(l1!=null){
  19. tmp.next=l1;
  20. }
  21. else{
  22. tmp.next=l2;
  23. }
  24. return l.next;
  25. }
  26. }

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

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

  • 206. Reverse Linked List

  1. class Solution {
  2. public ListNode reverseList(ListNode head) {
  3. ListNode prev=head;
  4. if(prev==null){//空
  5. return null;
  6. }
  7. ListNode cur=prev.next;
  8. if(cur==null){//单个元素
  9. return prev;
  10. }
  11. ListNode next=cur.next;
  12. prev.next=null;
  13. if(next==null){//两个元素
  14. cur.next=prev;
  15. return cur;
  16. }
  17. while(next.next!=null){
  18. cur.next=prev;
  19. prev=cur;
  20. cur=next;
  21. next=next.next;
  22. }
  23. next.next=cur;
  24. cur.next=prev;
  25. head=next;
  26. return head;
  27. }
  28. }

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

考虑到了链表只有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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码创新者/article/detail/62893
推荐阅读
相关标签
  

闽ICP备14008679号