题目一:【K个一组翻转链表】力扣——25
给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。
k 是一个正整数,它的值小于或等于链表的长度。
如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。
示例 :
给定这个链表:1->2->3->4->5
当 k = 2 时,应当返回: 2->1->4->3->5
当 k = 3 时,应当返回: 3->2->1->4->5
#!/bin/bash
#K个一组翻转链表
#author:yzt 2019-10-28
#
cat /dev/null > tmp1.txt
echo "$1"|sed 's#->#\n#g' >tmp.txt
read -t 20 -p "请输入节点数:" point
num_1=`cat tmp.txt|wc -l`
declare -i aa=1
point_1=$[$point-1]
for i in `cat tmp.txt`
do
bb=$[$aa+$point_1]
sed -n "$aa,$bb p" tmp.txt|tac >>tmp1.txt
aa=$[$aa+$point]
if [ $aa -gt $num_1 ];then
break
fi
done
str=""
for j in `cat tmp1.txt`
do
str="$str$j->"
done
echo "$str"|sed 's#->$##'
脚本逻辑:
1、K个一组翻转的关键是如何在字符串中获取K个字符,然后使用翻转语句tac或者rev进行翻转,最后将翻转结果追加到变量中
脚本效果:
[root@localhost leetcode]# ./Kgeyizufanzhuanlianbiao "1->2->3->4->5->6->7->8->9"
请输入节点数:3
3->2->1->6->5->4->9->8->7
[root@localhost leetcode]# ./Kgeyizufanzhuanlianbiao "1->2->3->4->5->6->7->8->9"
请输入节点数:4
4->3->2->1->8->7->6->5->9
[root@localhost leetcode]# ./Kgeyizufanzhuanlianbiao "1->2->3->4->5->6->7->8->9"
请输入节点数:5
5->4->3->2->1->9->8->7->6
题目二:【删除排序数组中的重复项】力扣——26
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
示例 1:
给定数组 nums = [1,1,2],
函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。
你不需要考虑数组中超出新长度后面的元素。
示例 2:
给定 nums = [0,0,1,1,1,2,2,3,3,4],
函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。
你不需要考虑数组中超出新长度后面的元素。
#!/bin/bash
#删除排序数组中的重复项
#author:yzt 2019-10-30
#
cat /dev/null >tmp.txt
echo "$1"|sed 's#\[\|\]##g'|sed 's#,#\n#g' >tmp.txt
cat tmp.txt|sort -n|uniq >tmp1.txt
str=""
for i in `cat tmp1.txt`
do
str=$str$i,
done
str1=`echo "$str"|sed 's#,$##'`
echo "[$str1]"
脚本逻辑:
1、字符去重即可,需要用到sort和uniq
脚本效果:
[root@localhost leetcode]# ./shanchupaixushuzuzhongdechongfuxiang.sh "[1,1,2,3,4,3,2]"
[1,2,3,4]
[root@localhost leetcode]# ./shanchupaixushuzuzhongdechongfuxiang.sh "[1,1,2,3,4,3,2,5,5]"
[1,2,3,4,5]