Java:双向链表反转实现
生活随笔
收集整理的這篇文章主要介紹了
Java:双向链表反转实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
有個小需求要求實現一個雙向鏈表的反轉于是就有了下邊代碼:
鏈表元素結構定義:
package com.util;public class LinkedNode<T>{private T value;private LinkedNode<T> prev;private LinkedNode<T> next; public LinkedNode(T value, LinkedNode<T> prev, LinkedNode<T> next) {super();this.value = value;this.prev = prev;this.next = next;}public T getValue() {return value;}public void setValue(T value) {this.value = value;}public LinkedNode<T> getPrev() {return prev;}public void setPrev(LinkedNode<T> prev) {this.prev = prev;}public LinkedNode<T> getNext() {return next;}public void setNext(LinkedNode<T> next) {this.next = next;} }鏈表定義:
package com.util;public class LinkedList<T>{private transient int size=0;private transient LinkedNode<T> first=null;private transient LinkedNode<T> last=null;/*** 添加元素到雙向鏈表頭部* */public void addFirst(T t){LinkedNode<T> oldFirst = first;LinkedNode<T> newNode = new LinkedNode<T>(t, null,oldFirst);first = newNode;if (oldFirst == null)last = newNode;elseoldFirst.setPrev(newNode);size++;}/*** 將雙向鏈表轉化為一元數組:從頭開始循環到尾部。* */public Object[] toArray() {Object[] result = new Object[size];int i = 0;for (LinkedNode<T> node = first; node != null; node = node.getNext())result[i++] = node.getValue();return result;} /*** 反轉* */public void reverse(){if(first==null||last==null)return;LinkedNode<T> prev;LinkedNode<T> next;LinkedNode<T> newFirst=null;LinkedNode<T> newLast=null;for (LinkedNode<T> node = first; node != null; node = node.getPrev()){prev= node.getPrev();next= node.getNext();if(node.getPrev()==null){newLast=node;}else if(node.getNext()==null){newFirst=node;} node.setNext(prev);node.setPrev(next); }first=newFirst;last=newLast;} }備注:這里主要實現了三個功能,在鏈表頭部添加元素、toArray函數、反轉函數,實際上鏈表應該包含其他功能:末尾添加元素,插入元素,索引,移除,遍歷等。
測試代碼:
import com.util.LinkedList;public class LinkedListTest {public static void main(String[] args) {LinkedList<String> list=new LinkedList<String>();list.addFirst("5");list.addFirst("3");list.addFirst("1");for (Object string : list.toArray()) {System.out.println(string);}System.out.println("-------------------------------開始反轉-------------------------------");list.reverse();System.out.println("-------------------------------結束反轉-------------------------------");for (Object string : list.toArray()) {System.out.println(string);} }}?
總結
以上是生活随笔為你收集整理的Java:双向链表反转实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: POJ 1182 食物链(并查集+偏移向
- 下一篇: UI组件-UITabbarControl