标签:ListNode int next tail l2 第五天 null
链表(Linked List)
- 链表是有序列表
单项链表的建立
题目1
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储一位数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
- 代码示例
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行
标签:ListNode,int,next,tail,l2,第五天,null 来源: https://www.cnblogs.com/franksimon/p/14962098.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。