2022-01-09 链表

作者: 16孙一凡通工 | 来源:发表于2022-01-09 17:34 被阅读0次

链表定义:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */

反转链表:
用到了之前写的ArrayDeque来当作栈使用,因为ArrayDeque的方法可以作栈和队列。
采用栈的特性进行了链表的反转。
java版本


class Solution {
    public ListNode reverseList(ListNode head) {
    ArrayDeque<Integer> stack=new ArrayDeque<>();
   ListNode temp=head;
    while(temp!=null){
        stack.add(temp.val);
        temp=temp.next;
    }
        ListNode ans=new ListNode();
        ListNode res=ans;
          if(stack.size()==0){
              return head;
          }
        res.val=stack.pollLast();
       
     while(stack.size()!=0){
         ListNode tmp=new ListNode();
          tmp.val=stack.pollLast();
           res.next=tmp;
           res=res.next;
         
     }
     return ans;



    }
}

剑指 Offer II 025. 链表中的两数相加

反转两个链表的基础上依次相加即可。注意考虑两个链表长度不一致和相加进位的情况
java版本

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        // 两个链表倒过来逐个相加
        
    ListNode l1_rev=reverseList(l1);
        ListNode l2_rev=reverseList(l2);
        int count=0;
        ListNode ans=new ListNode();
        ListNode  res=ans;
        res.val=0;
        while(l1_rev!=null && l2_rev!=null){
         ListNode tmp=new ListNode();
         tmp.val=l1_rev.val+l2_rev.val+count;
         if(tmp.val>=10){
         tmp.val=tmp.val-10;
           count=1;
         }else{
             count=0;
         }
         res.next=tmp;// ?
         res=res.next;
         l1_rev=l1_rev.next;
         l2_rev=l2_rev.next;
        }
        // 确定哪一个还有值
       
       ListNode temp=null;
        if( l1_rev!=null){
          temp=l1_rev;
        }
        if( l2_rev!=null){
         temp=l2_rev;
        }
        while(temp!=null || count!=0){
            ListNode tmp=new ListNode();
            if(temp==null){
                temp=new ListNode();
                temp.val=0;
            }
         tmp.val=temp.val+count;
         if(tmp.val>=10){
         tmp.val=tmp.val-10;
           count=1;
         }else{
             count=0;
         }
         res.next=tmp;// ?
         res=res.next;
        temp=temp.next;
        
        }
        return reverseList(ans.next);





    }


     public ListNode reverseList(ListNode head) {
    ArrayDeque<Integer> stack=new ArrayDeque<>();
   ListNode temp=head;
    while(temp!=null){
        stack.add(temp.val);
        temp=temp.next;
    }
        ListNode ans=new ListNode();
        ListNode res=ans;
          if(stack.size()==0){
              return head;
          }
        res.val=stack.pollLast();
       
     while(stack.size()!=0){
         ListNode tmp=new ListNode();
          tmp.val=stack.pollLast();
           res.next=tmp;
           res=res.next;
         
     }
     return ans;
    }
}

026重排链表:

Go 新建链表节点 ans:=&ListNode{Val:head.Val};
go版本:


func reorderList(head *ListNode)  {
    //    // 还不如重新建个链表,根据顺序慢慢放值
   
    
    res:=head;
    var arr []int;
     var get []int;

    for{
        if(head==nil){
            break;
        }
        arr=append(arr,head.Val);
        head=head.Next;
      
    }
     get=append(get,arr[0])
     length:=len(arr);
    for i:=1;i<length;i++{
        if i%2==0{
        get=append(get,arr[int(i/2)])
        }else{
          get=append(get,arr[length-int(i/2)-1]);
        }
       
    }
    res.Val=get[0];
     for i:=1;i<length;i++{
         temp:=&ListNode{Val:get[i]}
  
     res.Next=temp;
     res=res.Next;
     }
    
}

相关文章

  • 2022-01-09 链表

    链表定义: 反转链表:用到了之前写的ArrayDeque来当作栈使用,因为ArrayDeque的方法可以作栈和队列...

  • 读《Bad Blood》by John Carreyrou

    2022-01-09 There came a point when Holmes stopped listeni...

  • PHP强化之03 - 数组 Array(新)

    ----- 最后更新【2022-01-09】----- PHP强化系列--目录[https://www.jians...

  • 橙子的ScalersTalk第六轮新概念朗读持续力训练Day 8

    练习材料:[Day 2663 2022-01-09] Lesson87 A perfect alibi 'At t...

  • 《句句成章》54 感同身受

    原创 老区游子 游子岁月 2022-01-09 06:20 收录于话题 #打拼事业 为了生活 7 个 #懂得生活 ...

  • 链表基础

    链表基础 链表长度 链表为空 链表结构 链表增加

  • 自责

    原创 后山萤火 煦然之光 2022-01-09 00:10 无需自责,你没有任何错,所有的错都是你的幻觉或...

  • 双向链表&双向循环链表

    链表分为:单链表、单向循环链表、双向链表、双向循环链表本节主要说明:双向链表、双向循环链表 定义结点 一、双向链表...

  • 算法与数据结构:链表

    链表 链表还分为单向链表和双向链表, 但是这篇文章只说单向链表 , 下次再讲双向链表 . 链表和数组的区别 ? 链...

  • 链表

    链表 单链表反转链表中环的检测两个有序链表合并删除链表倒数第n个节点求链表的元素总个数 一.单向链表 链表共有特征...

网友评论

    本文标题:2022-01-09 链表

    本文链接:https://www.haomeiwen.com/subject/vigucrtx.html