【剑指offer】JZ5 替换空格、JZ6 从尾到头打印链表

简介: 【剑指offer】JZ5 替换空格、JZ6 从尾到头打印链表

JZ5 替换空格

描述:

请实现一个函数,将一个字符串s中的每个空格替换成“%20”。

例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

思路:

先读题理解题意。题中说字符串中出现空格替换为“%20”,我就想起来StringBuffer,通过遍历字符串,来判断拼接那个字符。

解题步骤:

1.new一个StringBuffer,备用。

2.遍历字符串,判断是否为空格:

(1)是空格:直接将字符append。(2)不是空格:将%20用函数append拼接上去:

代码如下:

public String replaceSpace (String s) {
        // write code here
        StringBuffer sb=new StringBuffer();
        for(int i=0;i<s.length();i++) {
            //1.不是空格,直接将字符append
            //2.是空格,append%20
            if(!(s.charAt(i)==' ')) {
                sb.append(s.charAt(i));
            } else {
                sb.append("%20");
            }
        } 
        return sb.toString();
    }


JZ6 从尾到头打印链表

描述:

输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)。

如输入{1,2,3}的链表如下图:

返回一个数组为[3,2,1]

思路:

从尾到头打印链表,因为链表是单向的,故我们到尾节点不能返回过来了。这时,我们想起一个数据结构---栈,它的顺序是先进后出,因此,我们可以让头先进,直至链表进入完,在通过栈,将数据全出栈, 逐个添加到线性表中,最终返回线性表。

解题步骤:

1.new一个栈,new一个链表。

2. 建立一个cur代替头节点走,将数据全放入到栈中。

3.压栈完毕后,再出栈,将出的每个节点的值,放到链表当中。

4.返回链表。

代码如下:

public class Solution {
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
        Stack<ListNode> stack=new Stack<>();
        ArrayList<Integer> arr=new ArrayList<>();
        ListNode cur=listNode;
        //将节点全入栈
        while(!(cur==null)) {
            stack.push(cur);
            cur=cur.next;
        }
        //出栈,按照出栈顺序将值添加到链表
        while(!stack.empty()) {
            ListNode tmp=stack.pop();
            arr.add(tmp.val);
        }
        return arr;
    }
相关文章
|
3月前
(剑指offer)18、删除链表的节点—22、链表中倒数第K个节点—25、合并两个排序的链表—52、两个链表的第一个公共节点(2021.12.07)
(剑指offer)18、删除链表的节点—22、链表中倒数第K个节点—25、合并两个排序的链表—52、两个链表的第一个公共节点(2021.12.07)
59 0
|
5月前
|
Python
【Leetcode刷题Python】剑指 Offer 22. 链表中倒数第k个节点
Leetcode题目"剑指 Offer 22. 链表中倒数第k个节点"的Python解决方案,使用双指针法找到并返回链表中倒数第k个节点。
62 5
|
5月前
|
Python
【Leetcode刷题Python】剑指 Offer 18. 删除链表的节点
Leetcode题目"剑指 Offer 18. 删除链表的节点"的Python解决方案,通过使用双指针法找到并删除链表中值为特定数值的节点,然后返回更新后的链表头节点。
49 4
|
8月前
【一刷《剑指Offer》】面试题 17:合并两个排序的链表
【一刷《剑指Offer》】面试题 17:合并两个排序的链表
|
8月前
【一刷《剑指Offer》】面试题 16:反转链表
【一刷《剑指Offer》】面试题 16:反转链表
|
8月前
【一刷《剑指Offer》】面试题 15:链表中倒数第 k 个结点
【一刷《剑指Offer》】面试题 15:链表中倒数第 k 个结点
|
7月前
|
存储 SQL 算法
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
|
7月前
|
存储 SQL 算法
LeetCode 题目 86:分隔链表
LeetCode 题目 86:分隔链表
|
7月前
|
存储 算法 Java
【经典算法】Leetcode 141. 环形链表(Java/C/Python3实现含注释说明,Easy)
【经典算法】Leetcode 141. 环形链表(Java/C/Python3实现含注释说明,Easy)
69 2
|
8月前
<数据结构>五道LeetCode链表题分析.环形链表,反转链表,合并链表,找中间节点.
<数据结构>五道LeetCode链表题分析.环形链表,反转链表,合并链表,找中间节点
83 1