一、獲取單鏈表的節點個數
思路:遍歷鍊錶
/**
* head 煉表頭結點
* @param head
* @return
*/ //方法:獲取到單鏈表結點的個數(如果是帶頭結點的鍊錶,不統計頭結點)
public static int getlength(heronode head)
int length=0;
//定義乙個輔助變數,沒有統計頭結點
heronode cur=head.next;
while(cur!=null)
return length;
}
二、查詢單鏈表中的倒數第index個節點
思路:從前往後找第(鍊錶長度-index)個節點就是倒數第index個節點
//思路
//1、編寫乙個方法,接收head節點,同時接收index
//2、index表示倒數第index個節點
//3、先把鍊錶從頭到尾遍歷,得到鍊錶總長度
//4、得到size後從鍊錶的第乙個開始遍歷size-index個
public static heronode findlastindexnode(heronode head,int index)
int size=getlength(head);
if(index<0||index>size)
//定義乙個輔助變數,指向第乙個有效節點
heronode cur=head.next;
for(int i=0;i三、單鏈表反轉
思路:先定義乙個新節點reversehead=new heronode();
定義乙個當前節點cur和乙個next節點,next用來儲存原煉表中當前節點的下乙個節點;
從頭到尾遍歷原來的鍊錶,每遍歷乙個節點,就將其取出,並放在新的鍊錶reversehead的最前端
原來的鍊錶的head.next=reversehead.next
//將單鏈表反轉
public static void reversedlist(heronode head)
//cur:當前節點
heronode cur=head.next;//先定義乙個輔助變數cur,幫助遍歷原來的鍊錶
heronode next=null;//指向當前節點cur的下乙個節點
heronode reversehead=new heronode(0, "", "");//新節點
//遍歷原來的鍊錶,每遍歷乙個節點,就將其取出,並放在新的鍊錶reversehead的最前端
while(cur!=null)
//將head.next指向reversehead.next,實現了單鏈表的反轉
head.next=reversehead.next;
}
單鏈表常見面試題
ifndef linklist h define linklist h define crt secure no warnings include include include string h include typedef int datatype typedef struct node no...
單鏈表的常見面試題
單鏈表的基礎操作 單鏈表建立面試題 1.從尾到頭列印單鏈表 2.刪除乙個無頭單鏈表的非尾節點 不能遍歷鍊錶 3.在無頭單鏈表的乙個非頭節點前插入乙個節點 不能遍歷鍊錶 4.單鏈表實現約瑟夫環 josephcircle 5.逆置 反轉單鏈表 6.查詢單鏈表的中間節點,要求只能遍歷一次鍊錶 void p...
單鏈表常見面試題及答案
一 單鏈表結點的刪除 0 刪除單鏈表p指向的那個元素,時間和空間複雜度盡量小 二 單鏈表的訪問 1 找出單鏈表的倒數第k個元素,僅允許遍歷一遍鍊錶 2 找出單鏈表的中間元素,僅允許遍歷一遍鍊錶 三 單鏈表與環的問題 3 判斷單鏈表是否有環 6形狀 4 如何找到環的入口?5 如何知道環的長度?6 帶環...