力扣刷题笔记day03--反转链表,无重复字符的最长子串

1.反转链表

题目:

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。例如:

输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]

该题需要定义一个null节点作为过渡,然后从头至尾依次将每个节点的指针指向前一个节点即可。

class solution{
    public ListNode reverseList(ListNode head){
        ListNode curr = head;
        ListNode prenode = null;
        while(curr != null){
            ListNode next = curr.next;
            curr.next = prenode;
            prenode = curr;
            curr = next;
        }
        return prenode;
    }
}

2.无重复字符的最长子串

题目:给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度

该题采用“滑动窗口法”求解。先创建一个hashmap用于存储最长子串。随后设置子串左边界与右边界,右边界逐步向右移动,并将沿途的元素加入到hashmap中,左边界先判断是否有重复字符,若有,则向后移动一位,若没有,则不动。每次循环比较子串长度最大值与当前子串长度,若最大值较大则不变,若当前子串长度较大,则将其替换为子串长度最大值。循环结束得到最长子串长度。

class Solution {
    public int lengthOfLongestSubstring(String s) {
        int left = 0;
        int max = 0;
        HashMap map = new HashMap(128,1);
        for(int i=0; i

你可能感兴趣的:(链表,leetcode,数据结构)