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

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

Java 利用棧來反轉鏈表和排序的操作

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

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

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('反轉之后的鏈表:'); display(head); }} class Node{ String val; Node next; public Node(String val) { this.val = val; } @Override public String toString() { return 'Node('+this.val+')'; }}運行程序,結果如下:

原始鏈表:

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

反轉之后的鏈表:

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

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

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

這里面把原棧中的數據放入輔助棧中,需要借助一個中間變量,原棧中彈出的數據放入中間變量中,而不是直接入輔助棧,如果棧頂的元素小于中間變量,那么將小于的數據再放入原棧中,再將中間變量放入輔助棧,接著再將原棧中的數據放入輔助棧,直到原棧為空。將中間變量放入輔助棧,類似插入排序,需要找到一個合適的位置,而移動出一個合適的位置,就是把輔助棧中的數據再次壓入原棧中。

算法示例代碼如下:

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數據結構與算法-------鏈表反轉(如何實現鏈表的逆序)

1. 問題:

鏈表 head -->1-->2-->3-->4-->5-->6-->7, 如何反轉為head -->7-->6->5-->4-->3-->2-->1,

2.思路(使用插入法)

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

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

在遍歷2的時候,鏈表變為head -->2-->1-->3-->4-->5-->6-->7,

3.代碼實現:

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

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

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

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
麻豆91精品视频| 久久福利精品| 欧美一区在线观看视频| 日韩中出av| 欧美另类中文字幕| 国产精品免费大片| 日韩精品91亚洲二区在线观看| 日韩精品久久理论片| 国产精品一区二区99| 久久伊人国产| 欧美日韩中文字幕一区二区三区| 欧美特黄a级高清免费大片a级| 亚洲一区二区动漫| 日韩欧美中文字幕在线视频| 国产精品伦一区二区| 精品久久精品| 欧美一区二区三区高清视频 | 国产一区二区三区四区大秀| 国产精品对白| 日韩精品水蜜桃| 欧美一级专区| 国产毛片久久久| 成人精品天堂一区二区三区| 亚洲一级淫片| 久久久久久婷| 亚洲伊人精品酒店| 精品国产a一区二区三区v免费| 亚洲香蕉网站| 国产欧美二区| 激情久久久久久久| 国产精品天天看天天狠| 欧美日韩在线二区| 日韩av三区| 精品国产欧美| 亚洲少妇一区| 国产一区二区三区不卡av | 精品国产黄a∨片高清在线| 激情综合网址| 国产欧美日韩视频在线| 女人av一区| 久久中文字幕一区二区三区| 国产亚洲毛片| 国产精品久久久久蜜臀| 亚久久调教视频| 久久久精品网| 国产精品2023| 欧美日韩第一| 国产精品毛片一区二区在线看| 一区二区三区国产在线| 中文字幕一区久| 国产精品一区二区三区av麻| 女同性一区二区三区人了人一| 久久这里只有精品一区二区| 视频一区在线播放| 电影天堂国产精品| 国产精品s色| 日韩精品久久久久久| 99国产精品99久久久久久粉嫩| 国产专区精品| 国产免费av国片精品草莓男男| 日本大胆欧美人术艺术动态| 久久中文字幕一区二区| 天堂va在线高清一区| 亚洲男女av一区二区| 中文在线а√天堂| 久久一区视频| 国产欧美日韩精品一区二区免费 | 红杏一区二区三区| 国产精品亚洲四区在线观看| 亚洲人妖在线| 亚洲综合不卡| 中国女人久久久| 色婷婷综合网| 国产一区二区三区探花| 欧美国产视频| 国产精品a级| 国产精品男女| 国产美女精品视频免费播放软件| 在线国产精品一区| 日韩一区精品视频| 日韩精品一级二级| 亚洲午夜久久| 日本不卡一二三区黄网| 美女被久久久| 亚洲国产成人精品女人| 亚洲夜间福利| 欧美日韩国产一区精品一区| 国产精品115| 欧美一级一区| 国产日韩欧美中文在线| 中文字幕av一区二区三区人| 一区视频在线| 红桃视频欧美| 亚洲伦乱视频| 今天的高清视频免费播放成人| 久久蜜桃资源一区二区老牛| 美女视频网站久久| 精品国产一区二区三区性色av| 国产精品传媒麻豆hd| 国产精品久久久久毛片大屁完整版| 日韩一区精品| 国产精品亚洲一区二区在线观看| 麻豆精品久久久| 欧美日韩中出| 国产一区二区三区探花| 日韩啪啪电影网| 黄色在线一区| 亚洲欧美日本国产| 国产精品日本一区二区不卡视频| 国产精品观看| 青青青免费在线视频| 日韩精品欧美激情一区二区| 在线亚洲一区| 日韩二区三区四区| 精品一区视频| 久久精品不卡| 涩涩涩久久久成人精品| 中文字幕人成乱码在线观看| 一级欧美视频| av资源新版天堂在线| 激情欧美一区二区三区| 一区二区三区四区在线观看国产日韩| 亚洲精品高潮| 欧美国产另类| 日韩国产欧美| 首页亚洲欧美制服丝腿| 欧美日韩a区| 精品视频一区二区三区四区五区| 电影亚洲精品噜噜在线观看 | 国产精品试看| 丝袜诱惑制服诱惑色一区在线观看| 91嫩草精品| 国产高清不卡| 亚洲aa在线| 欧美男人天堂| 婷婷五月色综合香五月| 国产一区日韩| 免费观看久久久4p| 精品国产精品国产偷麻豆| 1024精品一区二区三区| 精品国产午夜肉伦伦影院 | 蜜臀va亚洲va欧美va天堂| 国产欧美一区二区精品久久久 | 久久狠狠久久| 精品国模一区二区三区| 亚洲日本欧美| 欧美日韩精品免费观看视完整| 亚洲精品高潮| 少妇久久久久| 国产欧美自拍| 在线亚洲一区| 国产一区二区三区探花| 91精品综合| 国产精品一卡| 香蕉成人久久| 中文字幕人成乱码在线观看| 午夜视频一区二区在线观看| 日韩精品午夜| 国产精品第十页| 日韩专区欧美专区| 国产精品伦理久久久久久| 日韩欧美美女在线观看| 91精品久久久久久久久久不卡| 欧美亚洲三级| 亚洲欧美日韩一区在线观看| 国产精品亚洲一区二区三区在线观看| 日韩激情啪啪| 欧美日韩激情| 丰满少妇一区| 国产视频一区二区在线播放| 丝袜脚交一区二区| 99国产精品一区二区| 国产九九精品| 日韩1区2区3区| 丝袜美腿成人在线| 欧美成人久久| 你懂的亚洲视频| 日韩影院免费视频| 波多野结衣一区| 中文字幕成在线观看| 国产精品久久久久毛片大屁完整版 | 欧美xxxx中国| 国产亚洲人成a在线v网站| 国产精品外国| 欧美在线亚洲| 91精品国产自产在线观看永久∴ | 亚洲精品888| 国产99久久久国产精品成人免费| 精品国产a一区二区三区v免费| 国产亚洲字幕| 欧美日韩亚洲国产精品| 日韩一区二区三区四区五区| 成人va天堂| 久久精品欧美一区| 亚洲天堂1区| 久久精品1区| 午夜国产一区二区| 99国产精品久久久久久久成人热| 91高清一区| 99视频精品免费观看|