面試題19——怎樣把一個單鏈表反序
(1)反轉一個連結串列。迴圈演算法:
List reverse(List n)
{
if(!n) //判斷連結串列是否為空,為空退出
{
return n;
}
list cur=n.next; //儲存頭結點的下個節點
list pre=n; //儲存頭結點
list tmp;
pre.next=NULL; //頭結點的指標指空,轉換後變尾結點;
while(NULL!=cur.next) //迴圈直到cur.next為空
{
tmp=cur;
tmp.next=pre;
pre=tmp;
cur=cur.next
}
return tmp; //返回頭指標
}
(2)反轉一個連結串列,遞迴演算法:
List*reverse(List*oldList,List*newHead=NULL)
{
List*next=oldList->next;
oldList->next=newHead;
newHead=oldList;
return(next==NULL)?newHead:reverse(t,newHead);
}
相關推薦
面試題19——怎樣把一個單鏈表反序
(1)反轉一個連結串列。迴圈演算法: List reverse(List n) { if(!n) //判斷連結串列是否為空,為空退出 { return n; } list cur=n.next; //儲存頭結點的下個節點 list pre=n; /
筆試題:判斷一個單鏈表是否有環,如果有,找出環的起始位置
</pre><pre name="code" class="cpp">Node * FindLoop(Node *phead) { Node *p = phead,q = phead,h = phead; while(p && q->next)
演算法面試題:如何判斷單鏈表中是否存在環
題目分析 一道演算法面試題:判斷單鏈表是否存在環。 我們知道單鏈表中結點都是一個結點指向下一個結點這樣一個一個連結起來的,直到尾結點的指標域沒有指向,單鏈表就到此結束了。 這裡存在環的意思就是,尾結點的指標域併為空,而是指向此單鏈表的其他結點,這樣就形成環了,這樣遍歷單鏈表
單鏈表反序原理
原理看圖說話,說得比較清晰 /* 單鏈表反轉/逆序 */ LinkList ListReverse(LinkList list) { LinkList *tmp = NULL;
單鏈表反序(反轉)C++實現
問題描述 解決方法 方法一:利用三個指標 思路,利用三個指標(pre,mid,after),原始狀態為head->pre->mid->after,然後pre->next=null ,變成head pre->mi
百度面試題:一個單鏈表,長度未知,如何快速的找出位於中間的那個元素
問題: 一個單鏈表,長度未知,如何快速的找出位於中間的那個元素? 設定兩個指標,p1,p2, 開始p1,p2均位於連結的頭部。 p1 每次步進兩步, p2 每次步進一步 當p1到達連結串列的末尾時,p2所在的位置就是連結串列的中間元素 時間複雜度為O(n) 詳
面試題:將一個字串陣列中的字母按照以下規則排列:表中任何單詞的首字母與其前面單詞的尾字母相同! 要求:字串只由小寫字母構成,且每個字串長度在2-100之間
package my_pro1; import java.util.ArrayList; import java.util.Iterator; public class WorkListOrder { public static int canArrangeWords
[js高手之路]javascript騰訊面試題學習封裝一個簡易的異步隊列
騰訊 selector host .proto 算法 obj 代碼 ner 試題 這道js的面試題,是這樣的,頁面上有一個按鈕,一個ul,點擊按鈕的時候,每隔1秒鐘向ul的後面追加一個li, 一共追加10個,li的內容從0開始技術( 0, 1, 2, ....9 ),首先我
數據結構-編程實現一個單鏈表的測長
.com 元素 頭結點 png 指針 控制 data amp 技術分享 1:代碼如下: // ConsoleApplication15.cpp : 定義控制臺應用程序的入口點。 // #include "stdafx.h" #include <malloc.h&g
劍指offer - 面試題33 - 把數組排成最小的數
print offer include .html str 把數組排成最小的數 pri tr1 class #include<iostream> #include<vector> #include<string> #include<
java算法面試題:編寫一個截取字符串的函數,輸入為一個字符串和字節數,輸出為按字節截取的字符串,但要保證漢字不被截取半個, 如“我ABC”,4,應該截取“我AB”,輸入“我ABC漢DEF”,6,應該輸出“我ABC”,而不是“我ABC+漢的半個”。
構造 pack n) -- com post nts throw ... package com.swift; import java.util.Scanner; public class Hanzi_jiequ { public static void m
java算法面試題:設計一個快速排序。雙路快速排序,簡單易於理解。
面試題 != ava 思路 add bubuko 比較器 繼續 array package com.swift; import java.util.ArrayList; import java.util.Collections; import java.util.Com
如何判斷一個單鏈表是否有環?
算法 查找 public class LinkedListRing{ static class LinkedNode<T>{ private T t ; private LinkedNode<T> next = null; public LinkedNode(T t)
自己動手寫一個單鏈表
兩個指針 isl linklist nextn mob 內部 數組 nds pty 文章有不當之處,歡迎指正,如果喜歡微信閱讀,你也可以關註我的微信公眾號:好好學java,獲取優質學習資源。 一、概述 單向鏈表(單鏈表)是鏈表的一種,其特點是鏈表的鏈接方向是單向的,對鏈表
面試題:把數組排成最小的數
compare clas 一個 pub tor str 所有 重點 最小 題目描述:輸入一個正整數數組,把數組裏所有數字拼接起來排成一個數,打印能拼接出的所有數字中最小的一個。例如輸入數組{3,32,321},則打印出這三個數字能排成的最小數字為321323。 重點是重寫C
linux面試題:刪除一個目錄下的所有文件,但保留一個指定文件
spa -a ash exclude 事先 file roo 老師 保留 面試題:刪除一個目錄下的所有文件,但保留一個指定文件 解答: 假設這個目錄是/xx/,裏面有file1,file2,file3..file10 十個文件 [root@oldboy xx]# to
C 將一個單鏈表拆成3個迴圈連結串列,其中一個是純數字,一個純字母,一個其他字元
前面相關操作在這呢,這個函式依託於此 //結構體 typedef struct Node { ElementType data; struct Node * next; } LNode, * LinkNode; //將一個單鏈表拆成3個迴圈連結串列,其中一個是純數字
面試題:判斷一個物件是不是陣列型別
<script> //判斷一個物件是不是陣列型別 typeof不能檢視所有型別 var obj1={x:1,y:2}, obj2=[1,2,3], obj3=new Date(); //1.判斷爹(原型物件)
將兩個單鏈表合併成一個單鏈表,L1,L2 —>L3
將兩個單鏈表合併成一個單鏈表 假設L1=(x1,x2,x3……Xn)長度為n L2=(y1,y2,y3………Ym)長度為m 若m<n,則L3=(x1,y1,x2,y2,x3,y3………………Xn,Yn,Yn+1,Yn+2……Ym); 若m>n,則L3=(x1,y1,x
藉助於棧結構將一個單鏈表逆置
藉助於棧結構將一個單鏈表逆置。 輸入輸出樣例:1組 #1 樣例輸入: 5 //連結串列中有幾個元素 1 2 3 4 5 //連結串列中的元素分別是什麼 樣例輸出: 5 4 3 2 1 //逆置後輸出,利用棧結構 #include <stdio.h>