【剑指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;
    }
相关文章
|
6天前
《剑指offer》——合并两个排序的链表
《剑指offer》——合并两个排序的链表
|
6天前
|
Java C语言
剑指offer(牛客)——合并两个排序的链表
剑指offer(牛客)——合并两个排序的链表
9 1
|
6天前
|
存储 Java C语言
剑指offer(牛客)——从尾到头打印链表
剑指offer(牛客)——从尾到头打印链表
11 1
|
6天前
|
算法
LeetCode刷题---19. 删除链表的倒数第 N 个结点(双指针-快慢指针)
LeetCode刷题---19. 删除链表的倒数第 N 个结点(双指针-快慢指针)
|
6天前
|
存储
LeetCode刷题---817. 链表组件(哈希表)
LeetCode刷题---817. 链表组件(哈希表)
|
6天前
【移除链表元素】LeetCode第203题讲解
【移除链表元素】LeetCode第203题讲解
|
6天前
|
算法 安全 数据处理
LeetCode刷题---707. 设计链表(双向链表-带头尾双结点)
LeetCode刷题---707. 设计链表(双向链表-带头尾双结点)
|
6天前
leetcode代码记录(移除链表元素
leetcode代码记录(移除链表元素
11 0
【每日一题】LeetCode——链表的中间结点
【每日一题】LeetCode——链表的中间结点
|
6天前
|
C++
[leetcode 链表] 反转链表 vs 链表相交
[leetcode 链表] 反转链表 vs 链表相交