天天看點

單連結清單,單連結清單面試題_韓順平聽課筆記

16.單連結清單介紹和記憶體布局;連結清單(Linked List),有帶頭結點和不帶頭結點之分;鍊式存儲,每個結點的位置不确定

單連結清單,單連結清單面試題_韓順平聽課筆記

17.單向連結清單的建立和周遊的分析實作

單連結清單建立示意圖(添加),周遊分析:

單連結清單,單連結清單面試題_韓順平聽課筆記

class Node結構:

單連結清單,單連結清單面試題_韓順平聽課筆記

單連結清單用一個類來實作class singleLinkedList,将一個個的Node對象通過next,在邏輯上相連

head節點private不能動,是以需要輔助變量temp幫助周遊

初始化一個頭結點,private head = new Node(0,"","");

temp.next==空時,連結清單到末尾

添加節點到單向連結清單(未考慮添加編号順序問題)

單連結清單,單連結清單面試題_韓順平聽課筆記

周遊單向連結清單

單連結清單,單連結清單面試題_韓順平聽課筆記

18.單連結清單順序加入節點,可以在記憶體中就将資料排好序

思路:先找到添加節點的位置,通過輔助變量(指針);新的節點next=temp.next;将temp.next=新的節點

單連結清單addByOrder方法:

因為單連結清單是單向的,是以temp是位于插入位置前的節點

通過flag判斷添加的編号是否已經存在

若不存在,則添加,新的節點next=temp.next;将temp.next=新的節點

19.單連結清單的修改update

判斷節點是都找到:

通過編号no,找到需要修改的節點

temp=head.next head不參與修改

flag=false 判斷被修改節點是否存在

temp==null(因為temp=head.next) 判斷是否已在連結清單末尾,是則break退出循環

temp.no==newNode.no 判斷編号是否一緻,一緻則flag=true,break修改節點

上兩個條件不滿足則,temp=temp.next,繼續判斷下一個節點

對節點修改:

如果flag=true,修改節點資訊

否則,提示目前編号節點未找到

20.單連結清單節點的删除

思路:找到被删除節點的前一個節點temp;temp.next=temp.next.next;被删除節點沒有其他引用指向,被GC回收

單連結清單,單連結清單面試題_韓順平聽課筆記

實作:

head不能動,要一個輔助節點找到待删除節點的前一個節點

temp.next.no與要删除節點的no進行比較,初始:temp=head

flag=false 标志是否找到待删除節點

(判斷)temp.next==null,已到連結清單末尾,break

(判斷)temp.next.no==no,找到要删除的節點的前一個節點,flag=true,break

temp=temp.next,繼續往下周遊連結清單

flag==true,删除temp.next節點,temp.next=temp.next.next

21.單連結清單面試題

統計單連結清單中有效節點的個數:

思路:

getLength方法,return連結清單長度length

将head作為參數傳入getLength方法

驗證連結清單是否為空,為空結束

用一個輔助變量,cur=head.next即不統計頭結點,開始周遊

length++,cur=cur.next

return length

單連結清單,單連結清單面試題_韓順平聽課筆記

查找單連結清單中倒數第k個節點(新浪面試題)

編寫一個方法,接收一個head和index=k,return 第k個節點

先周遊一遍連結清單,得到連結清單的長度size

index表示倒數第index個元素

再将連結清單周遊,輸出第size-index個元素

單連結清單,單連結清單面試題_韓順平聽課筆記
單連結清單,單連結清單面試題_韓順平聽課筆記

22.單連結清單的反轉(騰訊面試)

定義一個新節點reverseHead作為翻轉連結清單的頭

将原始連結清單從頭開始周遊,每取出一個元素node,就将元素放于reverseLinkedList的第一個位置,即node.next=reverseHead.next,reverseHead.next=node (因為需要從初始連結清單取資料,是以需要一個額外的變量next指向當初始連結清單的下一個要取的元素)

将原始連結清單周遊完後,原始連結清單的頭指針指向翻轉連結清單的第一個元素,head.next=reverseHead.next

單連結清單,單連結清單面試題_韓順平聽課筆記
單連結清單,單連結清單面試題_韓順平聽課筆記
單連結清單,單連結清單面試題_韓順平聽課筆記

23.從尾到頭列印單連結清單,要求方式1:反向周遊(破壞連結清單結構,不建議使用),方式2:Stack棧(百度面試)

單連結清單,單連結清單面試題_韓順平聽課筆記

棧的基本使用:

單連結清單,單連結清單面試題_韓順平聽課筆記
單連結清單,單連結清單面試題_韓順平聽課筆記

練習:合并兩個有序的單連結清單,合并之後的連結清單依然有序

建立一個新的newHead節點,作為合并後的連結清單表頭

取單連結清單資料時進行判斷,哪個更小/更大,則加傳入連結表尾部/第一個位置