从尾到头打印链表
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
输入: head = [1,3,2]
输出: [2,3,1]
限制:
0 <= 链表长度 <= 10000
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public int[] reversePrint(ListNode head) {
if(head == null){
return new int[0];
}
ListNode dummy = new ListNode();
ListNode node = head;
int i=0;
while(node != null){
ListNode temp = node.next;
node.next = dummy.next;
dummy.next = node;
node = temp;
i++;
}
int[] arr = new int[i];
int j=0;
node = dummy.next;
while(node != null){
arr[j] = node.val;
node = node.next;
j++;
}
return arr;
}
}
反转链表
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
限制:
0 <= 节点个数 <= 5000
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
ListNode dummy = new ListNode();
ListNode node = head;
while(node != null){
ListNode temp = node.next;
node.next = dummy.next;
dummy.next = node;
node = temp;
}
return dummy.next;
}
}
复杂链表的复制
请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。
输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]
输出:[[7,null],[13,0],[11,4],[10,2],[1,0]]
输入: head = [[1,1],[2,1]]
输出: [[1,1],[2,1]]
输入: head = [[3,null],[3,0],[3,null]]
输出: [[3,null],[3,0],[3,null]]
输入: head = []
输出: []
解释: 给定的链表为空(空指针),因此返回 null。
提示:
-10000 <= Node.val <= 10000Node.random为空(null)或指向链表中的节点。- 节点数目不超过 1000 。
/*
// Definition for a Node.
class Node {
int val;
Node next;
Node random;
public Node(int val) {
this.val = val;
this.next = null;
this.random = null;
}
}
*/
class Solution {
public Node copyRandomList(Node head) {
if(head == null){
return head;
}
Node node = head;
while(node !=null){
Node newNode = new Node(node.val);
newNode.next = node.next;
node.next = newNode;
node = node.next.next;
}
node = head;
while(node != null){
if( node.random != null){
node.next.random = node.random.next;
}
node = node.next.next;
}
node = head;
Node dummy = head.next;
while(node != null){
Node temp = node.next;
node.next = node.next.next;
node = node.next;
if(node != null){
temp.next = node.next;
}
}
return dummy;
}
}