資料結構與演算法 4 單鏈表面試題

2022-09-19 04:45:11 字數 2904 閱讀 8033

/*

* head 鍊錶的頭節點

* 返回有效節點的個數,沒有統計頭節點

* */

public static int getlength(heronode head)

int length = 0;

//定義乙個輔助變數

heronode cur = head.next;

while(cur != null)

return length;

}

//思路

//1、編寫乙個方法接收,接收head節點,同時接收乙個index

//2、index表示倒數第index個節點

//3、先把鍊錶從頭到尾遍歷,得到鍊錶的總的長度

//4、得到size後,我們從鍊錶的第乙個開始遍歷(size-index)個

//5、找到返回該節點,沒有返回空

public static heronode findlastindexnode(heronode head,int index)

//第一次遍歷得到鍊錶的長度(節點的個數)

int size = getlength(head);

//第二次遍歷 size-index位置,就是我們倒數的第k個節點

//先做乙個index的校驗

if(index<=0||index>size)

//定義以輔助變數,for迴圈定位到倒數的index個

heronode cur = head.next;

for(int i=0;istack = new stack();

heronode cur = head.next;

//將鍊錶的所有節點壓入棧中

while(cur != null)

//將棧中的節點進行列印,pop()

//合併兩個有序的單鏈表,合併之後的鍊錶依然有序

public static singlelinkedlist listjoinlist(singlelinkedlist singlelinkedlist1,singlelinkedlist singlelinkedlist2)

if(head2.next == null)

//定義乙個輔助指標(變數),遍歷第乙個鍊錶

heronode cur1 = head1.next;

//指向第乙個的下乙個節點

heronode next1 = null;

//定義乙個輔助指標(變數),遍歷第二個鍊錶

heronode cur2 = head2.next;

//指向第二個的下乙個節點

heronode next2 = null;

//合併後的鍊錶

singlelinkedlist joinedlinkedlist = new singlelinkedlist();

//合併後的煉表頭

heronode joinedhead = joinedlinkedlist.gethead();

/* * [0,2,4],[1,3,5],

* 當為0時,1,3,5遍歷一次 joinedhead --> 0,1,3,5

* 當為2時,1,3,5再遍歷一次 joinedhead -->

* 當為4時,1,3,5再遍歷一次

* * */

//遍歷第乙個鍊錶

while(cur1 != null) else

cur2 = next2;//讓cur指向下乙個節點,後移

} cur1 = next1;//讓cur指向下乙個節點,後移

} return joinedlinkedlist;

}

public static void combinelist(heronode head1,heronode head2)else if (head2.next == null)

//合併後的鍊錶

singlelinkedlist joinedlinkedlist = new singlelinkedlist();

heronode nextjoined = joinedhead;

joinedlinkedlist.head = nextjoined;

while(next1 != null||next2 != null) else if(next1 != null && next2 == null) else else

} nextjoined = nextjoined.next;

} singlelinkedlist singlelinkedlist = new singlelinkedlist();

singlelinkedlist.list2(joinedhead);

}

//顯示鍊錶,通過遍歷

public void list2(heronode headnode)

//因為頭節點不能動,因此需要乙個輔助變數來遍歷

heronode temp = headnode.next;

while(true)

//輸出節點的資訊

system.out.println(temp);

//將next後移,一定小心,不然是死迴圈

資料結構(七) 單鏈表面試題 二

單鏈表的翻轉 思路 定義節點reversehead new heronode 遍歷鍊錶,遍歷乙個就放入最前端,放入新的鍊錶 head.next reversehead.next public static void reverselist heronode head if head.next nul...

資料結構 鏈表面試題總

以下 是在vs2013下編寫的 我們先來看一下測試結果 include include include include 鍊錶的定義 typedef int datatype typedef struct slistnode slistnode 初始化 void slistinit slistnode...

單鏈表 (面試題)

關於單鏈表的基本操作,之前已經總結過了,那些掌握之後算是了解了單鏈表是什麼?不過現在面試的題中,肯定不會只讓你回答單鏈表的基礎操作,總是會改變一些東西,或是擴充套件一下。下面就是一些關於單鏈表的擴充套件內容 include include include pragma warning disable...