题目一:【合并K个排序链表】力扣——23
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。
示例:
输入:
[
1->4->5,
1->3->4,
2->6
]
输出: 1->1->2->3->4->4->5->6
#!/bin/bash
#合并K个排序链表
#author:yzt 2019-10-28
#
cat /dev/null >tmp.txt
echo "$1"|sed 's#,#\n#g'|sed 's#->#\n#g'|sort>tmp.txt
str=""
for i in `cat tmp.txt`
do
str="$str$i->"
done
echo "$str"|sed 's#->$##'
脚本解析:
此需求用shell实现比较简单,具体逻辑就不再分析了!
题目二:【两两交换链表中的节点】力扣——24
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
给定 1->2->3->4, 你应该返回 2->1->4->3.
#!/bin/bash
#两两交换链表中的节点
#author:yzt 2019-10-28
#
cat /dev/null > tmp1.txt
echo "$1"|sed 's#->#\n#g' >tmp.txt
num_1=`cat tmp.txt|wc -l`
declare -i aa=1
for i in `cat tmp.txt`
do
bb=$[$aa+1]
sed -n "$aa,$bb p" tmp.txt|tac >>tmp1.txt
aa=$[$aa+2]
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、使用sed有序获取两个节点
2、使用tac反转
脚本效果:
[root@localhost leetcode]# ./liangliangjiaohuanlianbiaozhongdejiedian.sh "1->2->3->4->5"
2->1->4->3->5
[root@localhost leetcode]# ./liangliangjiaohuanlianbiaozhongdejiedian.sh "1->2->3->4->5->6->10"
2->1->4->3->6->5->10