T1 06. 从尾到头打印链表
自己想的:拿到链表长度,一个数组放链表正序数,结果数组放倒序数
class Solution {
public int getLength(ListNode head){
int length = 0;
ListNode tmpNode = head;
while(tmpNode!=null){
length++;
tmpNode = tmpNode.next;
}
return length;
}
public int[] reversePrint(ListNode head) {
int len = getLength(head);
int[] list = new int[len];
int[] result = new int[len];
ListNode tmpNode = head;
for(int i=0;i<len;i++){
list[i] = tmpNode.val;
tmpNode = tmpNode.next;
}
for(int i=0;i<len;i++){
result[i] = list[len-1-i];
}
return result;
}
}
看了评论区,发现有了长度可以直接倒序,只需一个数组
class Solution {
public int getLength(ListNode head){
int length = 0;
ListNode tmpNode = head;
while(tmpNode!=null){
length++;
tmpNode = tmpNode.next;
}
return length;
}
public int[] reversePrint(ListNode head) {
int len = getLength(head);
int[] list = new int[len];
ListNode tmpNode = head;
for(int i=len-1;i>=0;i--){
list[i] = tmpNode.val;
tmpNode = tmpNode.next;
}
return list;
}
}
T2 24. 反转链表
迭代
class Solution {
public ListNode reverseList(ListNode head) {
ListNode pre=null,cur=head,next;
while(cur!=null){
next = cur.next;
cur.next = pre;
pre = cur;
cur = next;
}
return pre;
}
}
T3 35. 复杂链表的复制
看了题解 哈希表解法
class Solution {
public Node copyRandomList(Node head) {
Node cur = head;
Map<Node,Node> nodeMap = new HashMap<Node,Node>();
//第一次遍历用哈希表复制链表的节点 键:原节点 值:新节点
while(cur!=null){
nodeMap.put(cur,new Node(cur.val));
cur = cur.next;
}
//第二次遍历
cur = head;
while(cur!=null){
//为新节点添加next和random
nodeMap.get(cur).next = nodeMap.get(cur.next);
nodeMap.get(cur).random = nodeMap.get(cur.random);
cur = cur.next;
}
return nodeMap.get(head);
}
}