首页 > 编程知识 正文

单链表简单选择排序算法(算法)

时间:2023-05-03 14:33:18 阅读:80508 作者:1977

一、题目

单链表L:L0L1…Ln-1Ln,如果将其重新排列,则为L0LnL1Ln-1L2Ln-2…

二、思路

1)使用快速指针找到中间点,将链表分成两部分,然后反转第二个链表,将两个链表连接在一起

2 )使用两端队列

三、代码

1)

公共节点头) {

监听器=头;

if (头==空| |头.下一个==空) {

返回;

}

listnode slow=头;

列表节点快速=头;

wile (快速!=空的快速.下一个!=空值) {

慢=慢.下一个;

fast=fast.next.next;

}

监听器反转=慢速.下一个;

slow.next=空;

listnode pre=空;

监听器=反转;

威尔(Cur!=空值) {

ListNode next=cur.next;

cur.next=预先;

pre=cur;

cur=下一个;

}

反转=预;

listnode cur1=头;

监听器2=反转;

wile(cur1!=空Cur 2!=空值) {

列表节点下一个1=cur1.下一个;

列表节点下一个2=cur2.下一个;

cur2.next=next1;

cur1.next=cur2;

cur1=下一个1;

cur2=下一个2;

}

}

2 )

公共节点头) {

linkedlistlistnodequeue=新链接列表(;

监听器=头部;

威尔(Cur!=空值) {

队列最后(cur;

cur=cur.next;

}

while (! 队列. isempty () )

if (cur==空值) {

cur=queue.pollFirst (;

} else {

cur.next=queue.pollFirst (;

cur=cur.next;

}

cur.next=queue.pollLast (;

cur=cur.next;

}

红外线!=空值) {

cur.next=空值;

}

}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。