第五天

链表(Linked List)

  • 链表是有序列表

单项链表的建立

题目1

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储一位数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
image

  • 代码示例
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
      //尾插法建立单链表
      ListNode hand = null;
      ListNode tail = null;
      int sum;
      int addNum = 0;
      while(l1!=null||l2!=null){
          int num1 = l1 == null? 0:l1.val;
          int num2 = l2 == null? 0:l2.val;

          sum = num1 + num2 + addNum;
 
          if(hand == null){
              hand = tail = new ListNode(sum%10);
          }else{
              if(sum>=10){
                tail.next = new ListNode(sum-10 );
                tail = tail.next;
              }else{
                tail.next = new ListNode(sum);
                tail = tail.next;
              } 
          }
         addNum=sum/10;
         if(l1!=null)l1 = l1.next;
         if(l2!=null)l2 = l2.next;
      }
      if(addNum==1){
        tail.next = new ListNode(addNum);
        tail = tail.next;
      }
      return hand;
    }
}
总结
主要考察对于单链表的建立
  • 1.建立头尾节点
    ListNode hand = null;
    ListNode tail = null;
    
  • 2.临时节点
    tail.next = tempLinkedNode;
    tail = tail.next;
    

Z字型变换(感觉N更符合)

将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。

比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下:

P A H N
A P L S I I G
Y I R
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。

代码:

class Solution {
    public String convert(String s, int numRows) {
        int n = s.length();
        StringBuffer str = new StringBuffer();
        int cycleLen = 2*numRows-2;
        if(n==1)return s;
        for(int i=0;i<numRows;i++){//控制行数
            for(int j=0;j+i<n;j+=cycleLen){
                str.append(s.charAt(i+j));
                if(i!=0&&i!=numRows-1&&j + cycleLen - i<n){
                    char append=s.charAt(j+cycleLen-i);
                    str.append(append);
                }
            }
        }

        return str.toString();


    }
}
  • 总结
    找规律,每行顶点的数字是cycleLen=2*hang-2
    每行非顶点是 cycleLen+j个cycleLen-第i行
原文地址:https://www.cnblogs.com/franksimon/p/14962098.html