2019/10/29【合并K个排序链表】&【两两交换链表中的节点】

题目一:【合并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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值