java算法题面试 java入门基础知识

剑指 Offer 06. 从尾到头打印链表输入一个链表的头节点,从末尾到末尾返回每个节点的值(以数组形式返回)。类别解决方案6 {public int[]reverse print(list node head){//遍历

本文最后更新时间:  2023-02-23 22:19:10

剑指 Offer 06. 从尾到头打印链表

输入一个链表的头节点,从末尾到末尾返回每个节点的值(以数组形式返回)。

类别解决方案6 {

public int[]reverse print(list node head){

//遍历后,根据数组下标将元素闪回数组。

int index = 0;

ListNode node = head//临时计算链表的长度。

while(节点!= null){

index++;

node = node.next

}

//需要打开一个数组

int[]RES = new int[index];

for(int I = index-1;我& gt=0;我–){

RES[I]= head . val;

head = head.next

}

返回res

}

}

指剑献十八。删除链表的节点

class Solution { public ListNode deleteNode(ListNode head, int val) { if(head == null)return null; if(head.val == val) return head.next;//本来是return head, 但是这种情况特色,删除头节点,这行可以删掉,因为后面采用了虚拟头节点 //删除这个节点的前一个节点的位置,先找到,然后变换指针就可以 ListNode dummy = new ListNode(0);//虚拟头节点 dummy.next = head;//让他指向头节点 ListNode node = dummy;//临时节点,被删除的前一个节点 while(node != null && node.next != null){ if(node.next.val == val){ node.next = node.next.next;//单链表删除就是这么简单 break; } node = node.next;//否则的话继续后移 } return dummy.next; }

引用链表中倒数第二个节点。

进入一个链表,输出链表倒数第k个节点。为了符合大多数人的习惯,这个题目从1开始计数,即链表的结束节点为最后一个节点。

例如,一个链表有六个节点,从第一个节点开始,它们的值依次是1,2,3,4,5,6。该链表底部的第三个节点是值为4的节点。

/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public ListNode getKthFromEnd(ListNode head, int k) { //如果求正数第2个节点,你会怎么做?直接用一个index ,往后走2次就到了 //这里用双指针,两个指针的距离为k, 同时往后移; ListNode fast = head, slow = head; while(fast != null && k>0){ fast = fast.next; k--; } //这里用双指针,两个指针的距离为k, 同时往后移; //slow 指的就是倒数第k个 while(fast != null){ fast = fast.next; slow = slow.next; } return slow; }}

大家加油:P

温馨提示:内容均由网友自行发布提供,仅用于学习交流,如有版权问题,请联系我们。