1. 程式人生 > >javascript演算法-單鏈表

javascript演算法-單鏈表

function LinkedList(){
        let Node = function( element ){
            this.element = element;
            this.next = null;
        };

        let head = null;
        let length = 0;

        this.append = function( element ){
            let newNode = new Node( element );
            let current 
= null; if( head == null ){ head = newNode; }else{ current = head; while( current.next ) { current = current.next; } current.next = newNode; } length
++; }; this.size = function(){ return length; }; this.removeAt = function( pos ){ if( pos > -1 && pos < length ){ var current = head, index = 0, prev = null;
if( pos == 0 ){ head = current.next; }else{ while( index++ < pos ){ prev = current; current = current.next; } prev.next = current.next; length--; return current.element; } }else{ return null; } }; this.print = function(){ let current = head; while( current ){ console.log( current.element ); current = current.next; } }; this.insert = function( pos, element ){ let newNode = new Node( element ); let current, prev, index = 0; current = head; if( pos >= 0 && pos <= length ){ if( pos == 0 ){ newNode.next = head; head = newNode; }else{ while( index++ < pos ){ prev = current; current = current.next; } newNode.next = current; prev.next = newNode; } length++; return true; }else { return false; } }; this.toString = function(){ let current = head, string = ''; while( current ){ string += current.element + ','; current = current.next; } return string.substring( 0, string.length - 1 ); }; this.indexOf = function( element ){ let current = head, index = -1; while( current ){ index++; if( current.element == element ){ return index; } current = current.next; } return -1; }; this.remove = function( element ){ let pos = this.indexOf( element ); return this.removeAt( pos ); }; this.isEmpty = function(){ return length == 0; }; this.getHead = function(){ return head; } } var oLink = new LinkedList(); oLink.append( "java" ); oLink.append( "php" ); oLink.append( "javascript" ); oLink.append( "python" ); oLink.print(); console.log( "-----------------------節點個數------------------------") console.log( oLink.size() ); console.log( "-----------------------刪除第2個元素之前------------------------") console.log( oLink.removeAt( 2 ) ); console.log( "-----------------------刪除第2個元素之後------------------------") oLink.print(); console.log( "節點個數"); console.log( oLink.size() ); console.log( "-----------------------插入節點前------------------------") oLink.insert( 0, "c語言" ); oLink.insert( 3, "c++語言" ); console.log( "-----------------------插入節點後------------------------") oLink.print(); oLink.insert( 4, "erlang語言" ); console.log( "-----------------------插入節點後------------------------") oLink.print(); console.log( "-----------------------節點個數------------------------") console.log( oLink.size() ); console.log( "-----------------------toString------------------------") console.log( oLink.toString() ); console.log( "------------------------indexOf-----------------------" ); console.log( oLink.indexOf( "c語言2" ) ); console.log( "------------------------clear-----------------------" ); oLink.print();

相關推薦

javascript演算法-單鏈

function LinkedList(){ let Node = function( element ){ this.element = element; this.next = null; };

資料結構與演算法——單鏈(一)

單鏈表的頭插法,插入時就是逆序。 InsertList()還不完善。 #include<stdio.h> #include<stdlib.h> #define ERROR 0 #define OK 1 typedef int Status ; typedef int

演算法-單鏈及環

演算法-單鏈表及環   碰到一個問題,單鏈表及環的問題,整理一下各種解法:   1.1.    是否有環 連結串列唯一標識列表化,遍歷連結串列,判斷表中是否有當前節點唯一標識,有代表有環,無則將當前節點唯一標識加入列表。 時間複雜度最優,

JavaScript實現單鏈

功能 get(index):獲取連結串列中第 index 個節點的值。如果索引無效,則返回-1。 addAtHead(val):在連結串列的第一個元素之前新增一個值為 val 的節點。插入後,新節點將成為連結串列的第一個節點。 addAtTail(val):將值

資料結構及演算法——單鏈逆轉(C語言)(不間斷更新)

題目來源:浙大程式設計類實驗輔助教學平臺 本題要求實現一個函式,將給定的單鏈表逆轉。 函式介面定義: List Reverse( List L ); 其中List結構定義如下: typedef struct Node *PtrToNode; stru

資料結構與演算法-單鏈-線性錶轉置

問題:《資料結構與演算法分析(C++語言版)》p58 五、2 已知一個如下圖所示的帶頭結點的單鏈表head(注:若頭指標名是head,則把單鏈表稱為表head),其儲存結構為: typedef struct Lnode{ ElemType dat

js資料結構與演算法--單鏈的實現與應用思考

連結串列是動態的資料結構,它的每個元素由一個儲存元素本身的節點和一個指向下一個元素的引用(也稱指標或連結)組成。 現實中,有一些連結串列的例子。 第一個就是尋寶的遊戲。你有一條線索,這條線索是指向尋找下一條線索的地點的指標。你順著這條連結去下一個地點,得到另一條指向下一處的線索。得到列表中間的線索的唯一辦法

考研資料結構與演算法----單鏈的建立和讀取(1)

    先來個簡單的,晚上再把整表刪除神馬的加上,懶得註釋了,貼出來就是給同樣考研的同志們做個參考。     話說現在大學折騰的越來越水,當年我們學資料結構的時候單鏈表就算是五個實驗裡面第二難的了,最難的是一個二叉樹的,最後反正是都沒做出來直接往上抄的。其實現在回頭看過來倒

【資料結構】JavaScript實現單鏈單鏈反轉

連結串列 連結也是一種儲存資料的工具,不同於陣列,連結串列中的元素並不是連續儲存的。因此不能通過下標去訪問。 連結串列分為單(向)連結串列,雙向連結串列,迴圈連結串列等。.今天來實現一下單鏈表。 單鏈表中的每個元素包括兩個兩個域,一個是儲存元素本身的域,另一

資料結構與演算法JavaScript描述讀書筆記(js實現連結串列-單鏈

單鏈表 //建立建構函式建立節點 function Node(element){ this.element = element; this.next = null; } //連結串列的建構函式 function LList(){ this.head = new Node

javascript算法-單鏈

.get 單鏈表的實現 ring int pan length col asc UNC 鏈表相比數組更具靈活性和擴展性。主要有節點數據以及指向節點的指針所構成。 鏈表中節點的實現【元素和指針】: let Node = function( elemen

設計一個演算法,通過一趟遍歷確定長度為n的單鏈中值最大的結點。

語言:C++ #include <iostream> using namespace std; typedef int Elemtype; typedef struct LNode { Elemtype data; struct LNode *next; }LNode,*Lin

單鏈的C語言實現及插入刪除演算法

什麼是單鏈表?   由於順序表在插入和刪除是需要做大量的元素移動工作,而且需要連續的物理空間,因此其缺點是十分明顯的,為了解決這一問題,不需要預先分配連續的記憶體地址空間、插入刪除元素不需要做大量移動工作的連結串列出現了。但解決問題的同時也擁有自己的缺點,即不能隨機存取。   在連結串列中,每個

《java常用演算法手冊》 第二章 資料結構 順序 單鏈

資料元素:例如單向連結串列的一個節點  擁有 頭指標和資料兩個資料組成   四種儲存方式 :        

演算法與資料結構之單鏈

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

演算法題系列之三 - 單鏈反轉

問題: 實現單鏈表反轉 答案: 連結串列準備 class Node { private int Data;// 資料域 private Node Next;// 指標域 public Node(int Data) { // super(); this.Data = Da

題目9  單鏈中儲存M個整數,設計一個時間複雜度儘可能高效的演算法

單鏈表中儲存M個整數,設計一個時間複雜度儘可能高效的演算法,對於連結串列中絕對值相等的元素(|data|<n),只保留第一次出現的節點,刪除其餘的節點。如:15->(-3)->(-15)->3  得:15->(-3) 

[PTA] 資料結構與演算法題目集 6-1 單鏈逆轉

List Reverse(List L) { List p, q; p = L; q = L; L = NULL; while (p) { p = p->Next; q->Next = L; L = q

資料結構演算法題/合併兩個排好序的單鏈

原題   Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.&nbs