日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java 利用棧來反轉(zhuǎn)鏈表和排序的操作

瀏覽:24日期:2022-08-17 10:36:46

棧是一個特殊的數(shù)據(jù)結(jié)構,特點是先進后出(First In Last Out 簡稱FILO),這種特殊的數(shù)據(jù)結(jié)構,可以用在對鏈表做反轉(zhuǎn)中,或者字符串逆序,因為要把頭變成尾,尾變成頭,棧這種結(jié)構最合適不過了,下面來看看如何用棧來做鏈表的反轉(zhuǎn)。

package com.xxx.algorithm.sort;import java.util.Stack;public class LinkedListReverse { public static Node reverseLinkedList(Node head){ Stack<Node> stack = new Stack<Node>(); while(head!=null){ stack.push(head); head = head.next; } if(!stack.isEmpty()) head = stack.pop(); Node cur = head; while(!stack.isEmpty()){ Node node = stack.pop(); node.next = null; cur.next = node; cur = node; } return head; } public static void display(Node head){ System.out.print('list:'); Node cur = head; while(cur!=null){ System.out.print(cur+'->'); cur = cur.next; } System.out.println(); } public static void main(String[] args) { Node a = new Node('a'); Node b = new Node('b'); Node c = new Node('c'); Node d = new Node('d'); Node e = new Node('e'); Node f = new Node('f'); Node g = new Node('g'); a.next = b; b.next = c; c.next = d; d.next = e; e.next = f; f.next = g; System.out.println('原始鏈表:'); display(a); Node head = reverseLinkedList(a); System.out.println('反轉(zhuǎn)之后的鏈表:'); display(head); }} class Node{ String val; Node next; public Node(String val) { this.val = val; } @Override public String toString() { return 'Node('+this.val+')'; }}運行程序,結(jié)果如下:

原始鏈表:

list:Node(a)->Node(b)->Node(c)->Node(d)->Node(e)->Node(f)->Node(g)->

反轉(zhuǎn)之后的鏈表:

list:Node(g)->Node(f)->Node(e)->Node(d)->Node(c)->Node(b)->Node(a)->

通過棧來反轉(zhuǎn)鏈表思路很簡單,這只是說了棧作為一種數(shù)據(jù)結(jié)構,其實用途很廣泛。今天要介紹的另外一個棧的用途是如何通過棧來排序,利用棧來排序,需要有兩個棧,一個存放原始數(shù)據(jù),一個是輔助排序用的。

具體思路就是:將棧中的數(shù)據(jù)依次放入輔助棧中,放入輔助棧的要求是按照數(shù)據(jù)從大到小的排列(或者從小到大),先進入的是較大的數(shù),后進入的是較小的數(shù),如果原棧中沒有數(shù)據(jù)了,說明數(shù)據(jù)已經(jīng)在輔助棧中排好序了,接著我們把數(shù)據(jù)再一次性放入原棧中,如果遍歷,就是一個排好序的數(shù)組了。

這里面把原棧中的數(shù)據(jù)放入輔助棧中,需要借助一個中間變量,原棧中彈出的數(shù)據(jù)放入中間變量中,而不是直接入輔助棧,如果棧頂?shù)脑匦∮谥虚g變量,那么將小于的數(shù)據(jù)再放入原棧中,再將中間變量放入輔助棧,接著再將原棧中的數(shù)據(jù)放入輔助棧,直到原棧為空。將中間變量放入輔助棧,類似插入排序,需要找到一個合適的位置,而移動出一個合適的位置,就是把輔助棧中的數(shù)據(jù)再次壓入原棧中。

算法示例代碼如下:

package com.xxx.algorithm.sort;import java.util.Iterator;import java.util.Stack;public class StackSortDemo { public static void sortByStack(Stack<Integer> stack){ Stack<Integer> help = new Stack<Integer>(); while(!stack.isEmpty()){ int cur = stack.pop(); while(!help.isEmpty()&&help.peek()<cur){ stack.push(help.pop()); } help.push(cur); } while(!help.isEmpty()){ stack.push(help.pop()); } } public static void display(Stack<Integer> stack){ System.out.print('stack:'); Iterator<Integer> it = stack.iterator(); while(it.hasNext()){ System.out.print(it.next()+'->'); } System.out.print('null'); System.out.println(); } public static void main(String[] args) { Stack<Integer> stack = new Stack<Integer>(); stack.push(2); stack.push(9); stack.push(5); stack.push(4); stack.push(6); stack.push(3); stack.push(8); stack.push(7); System.out.println('原始棧:'); display(stack); sortByStack(stack); System.out.println('排序之后的棧:'); display(stack); }}運行程序,打印信息如下:

原始棧:

stack:2->9->5->4->6->3->8->7->null

排序之后的棧:

stack:2->3->4->5->6->7->8->9->null

補充:Java數(shù)據(jù)結(jié)構與算法-------鏈表反轉(zhuǎn)(如何實現(xiàn)鏈表的逆序)

1. 問題:

鏈表 head -->1-->2-->3-->4-->5-->6-->7, 如何反轉(zhuǎn)為head -->7-->6->5-->4-->3-->2-->1,

2.思路(使用插入法)

思路:從鏈表的第二個節(jié)點開始,把遍歷到的節(jié)點插入到頭結(jié)點的后面,直到遍歷結(jié)束。

假設原鏈表:head -->1-->2-->3-->4-->5-->6-->7,

在遍歷2的時候,鏈表變?yōu)閔ead -->2-->1-->3-->4-->5-->6-->7,

3.代碼實現(xiàn):

package LinkedList.Reverse;/* 這里使用插入法進行反轉(zhuǎn)鏈表 思路:從鏈表的第二個節(jié)點開始,把遍歷到的節(jié)點插入到頭結(jié)點的后面,直到遍歷結(jié)束。 假設原鏈表:head -->1-->2-->3-->4-->5-->6-->7, 在遍歷2的時候,鏈表變?yōu)閔ead -->2-->1-->3-->4-->5-->6-->7, */public class Reverse { public static void main(String[] args) { //定義頭結(jié)點 LNode head=new LNode(); head.next=null; LNode temp=null; LNode cur=head; //構造鏈表 for (int i = 1; i < 8; i++) { temp=new LNode(); //定義一個輔助節(jié)點 temp.data=i; //temp數(shù)據(jù)為I temp.next=null; cur.next=temp; //頭結(jié)點的下一個節(jié)點為temp cur=temp; //cur后移 由head移動到temp } System.out.println('逆序前:'); for (cur=head.next;cur!=null;cur=cur.next){ System.out.println(cur.data+' '); } System.out.println('逆序后:'); Reverse(head); for (cur=head.next;cur!=null;cur=cur.next){ System.out.println(cur.data+' '); } } public static void Reverse(LNode head){ if (head==null || head.next==null){//如果頭結(jié)點為空,或者頭結(jié)點的下一個節(jié)點為空,鏈表不用反轉(zhuǎn) return; } LNode cur=null;//定義一個當前節(jié)點 LNode next=null;//定義一個后繼節(jié)點 //讓當前節(jié)點指向第二個節(jié)點 cur=head.next.next; //先把第一個節(jié)點設置成最后一個節(jié)點 head.next.next=null; while (cur!=null){//如果當前節(jié)點不為空 next=cur.next;//先保存當前節(jié)點的后繼節(jié)點 如 2 的后面一個節(jié)點3 先保存起來 cur.next=head.next;// 就是把2 的下一個節(jié)點指向1 head.next=cur;//把頭結(jié)點指向2 cur=next; //將當前節(jié)點指向下一個 3 } }} class LNode{ LNode next; int data;}使用遞歸法

//使用遞歸法 private static LNode RecursiveReverse(LNode head){ //如果鏈表為空或者鏈表只有一個元素 if (head==null || head.next==null){ return head; }else { //反轉(zhuǎn)后面的節(jié)點 LNode newHead = RecursiveReverse(head.next); //把前面遍歷的節(jié)點加到后面節(jié)點逆序后鏈表的尾部 head.next.next=head; head.next=null; return newHead; } } public static void Reverse(LNode head){ if (head==null){ return; } //獲取鏈表的第一個節(jié)點 LNode firstNode=head.next; //對鏈表進行逆序 LNode newhead = RecursiveReverse(firstNode); head.next=newhead; }

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。如有錯誤或未考慮完全的地方,望不吝賜教。

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
麻豆高清免费国产一区| 日韩一区精品视频| 久久国产视频网| 欧美精品国产| 欧美91在线|欧美| 免费亚洲婷婷| 久久字幕精品一区| 国产成人免费精品| 综合日韩av| av综合电影网站| 91视频精品| 亚洲成人国产| 老司机精品久久| 日本国产欧美| 国产精品欧美在线观看| 麻豆久久久久久| a日韩av网址| 亚洲二区三区不卡| 亚洲小说春色综合另类电影| 欧美一级网站| 亚洲一级高清| 香蕉精品视频在线观看| 日韩视频久久| 亚洲精品看片| 国产精品草草| 久久亚洲国产精品尤物| 亚洲精品一级二级| 一本色道久久精品| 日韩av一级片| а√在线中文在线新版| 欧美大黑bbbbbbbbb在线| 亚洲精品系列| 精品国产欧美| 亚洲激情中文| 国产乱码精品一区二区三区四区| 国产成人精品三级高清久久91 | 免费在线观看一区| 在线手机中文字幕| 尤物网精品视频| 国产欧美一区二区三区米奇| 日韩免费在线| 热久久久久久久| 久久av免费看| 国精品一区二区| 国产日本亚洲| 99久久精品网站| 日韩av网站免费在线| 伊人久久国产| 日韩精品视频在线看| 日韩电影免费网址| 亚洲精品动态| 日韩在线短视频| 中文字幕av亚洲精品一部二部| 国产精品成人自拍| 午夜久久美女| 精品国产乱码久久久久久1区2匹| 影院欧美亚洲| 国产一区2区| 日韩一区精品| 亚洲网站视频| 久久精品一区| 中文字幕免费一区二区| 亚洲1234区| 欧美片第1页综合| 伊人影院久久| 麻豆成全视频免费观看在线看| 亚洲美女久久| 在线视频观看日韩| 国产精品巨作av| 久久国产88| 日韩一区自拍| 欧美极品中文字幕| 亚洲精选久久| 国产99精品| 免费一区二区三区在线视频| 免费看黄色91| 亚洲无线一线二线三线区别av| 美腿丝袜在线亚洲一区| 一区二区日韩免费看| 欧美日韩免费看片| 国产精品videosex极品| 亚洲一区欧美| 欧美日韩国产综合网| 精品免费在线| 日韩国产在线不卡视频| 在线亚洲观看| 国产欧美一区二区三区精品酒店 | 国产成人调教视频在线观看| 色综合视频一区二区三区日韩| 亚洲二区在线| 日本免费久久| 精品精品99| 久久爱www成人| 日韩精品欧美大片| 久久亚洲欧美| 国产一区观看| 88xx成人免费观看视频库| 美女精品视频在线| 欧美中文一区| 五月亚洲婷婷 | 综合一区二区三区| 久久中文字幕av一区二区不卡| 麻豆91在线播放| 欧美日韩亚洲国产精品| 亚洲欧美日韩一区在线观看| 欧美肉体xxxx裸体137大胆| 久久av网站| 国产欧美日韩精品一区二区免费| 亚洲一区欧美| 久久成人一区| 99视频在线精品国自产拍免费观看| 亚洲成人va| 午夜精品成人av| 日韩在线精品| 一本大道色婷婷在线| 美女网站视频一区| 日韩三区在线| 免费视频一区三区| 亚洲一级特黄| 久久人人88| 欧美jjzz| 日韩网站在线| 免费日韩av片| 日韩精品一级二级| 视频一区二区三区在线| 麻豆久久精品| 亚洲精品第一| 日韩福利视频导航| 欧美日韩中出| 麻豆精品视频在线观看视频| 久久精品一区二区国产| 国产一区二区三区精品在线观看| 久久久久久色| 国产欧美另类| 国产欧美日韩免费观看| 捆绑调教美女网站视频一区| 国产一区丝袜| 成人精品亚洲| 午夜久久福利| 亚洲免费成人av在线| 国产日本亚洲| 亚洲天堂资源| 99国产一区| 日韩久久99| 久久免费视频66| 精精国产xxxx视频在线野外| 亚洲女同中文字幕| 久久最新视频| 国产精品免费99久久久| 久久只有精品| 伊人久久大香线蕉av不卡| 免费不卡在线视频| 国产欧美日韩在线观看视频| 国产h片在线观看| 中文亚洲欧美| 国产欧美日韩综合一区在线播放| 日韩av有码| 在线综合亚洲| 国产精品色在线网站| 色婷婷色综合| 99国产精品视频免费观看一公开| 日韩精品社区| 国产欧美一区二区三区精品酒店| 欧美va天堂| 亚洲免费一区三区| 色综合五月天| 亚洲欧美日本国产专区一区| 国产人成精品一区二区三| 偷拍精品精品一区二区三区| 亚洲影视一区二区三区| 国产一区二区三区黄网站 | 日韩一区二区三区免费视频| 久久av偷拍| 99国产精品私拍| 国产精品久一| 一本一道久久a久久精品蜜桃| 日韩视频一二区| 色乱码一区二区三区网站| 久久www成人_看片免费不卡| 欧美成人精品一级| 欧美精品一线| 麻豆91在线播放| 亚洲深爱激情| 国产精品jk白丝蜜臀av小说| 日韩精品dvd| 自拍日韩欧美| 99久久99久久精品国产片果冰| 精品国产亚洲一区二区三区在线| 欧美另类综合| 日韩动漫一区| 麻豆精品99| 丝袜诱惑一区二区| 美女毛片一区二区三区四区最新中文字幕亚洲| 麻豆国产精品一区二区三区| 国产精品美女久久久久久不卡| 日韩精品麻豆| 国产精品三上| 精品视频国产| 日韩中文字幕在线一区| 三上悠亚国产精品一区二区三区|