鏈表面試題(一)

2021-09-23 23:50:05 字數 2077 閱讀 1602

1.反轉乙個單鏈表。

public class mysinglelinkedlmpl 

private int data;

public node next;

public node(int data)

}//節點類

private node head;

public mysinglelinkedlmpl()

public node reverselist()

cur.next=prev;

prev=cur;

cur=curnext;

}return reversehead;

}}

2.給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。 如果鍊錶無環,則返回 null。

public class mysinglelinkedlmpl 

private int data;

public node next;

public node(int data)

}//節點類

private node head;

public mysinglelinkedlmpl()

public node detectcycle()

}//沒有環

if(fast==null || fast.next.next==null)

//將slow拉到頭,然後和fast一人一步走

slow=this.head;

while (fast!=slow)

return slow;

}}

3.判斷鍊錶是否有環。

public class mysinglelinkedlmpl 

private int data;

public node next;

public node(int data)

}//節點類

private node head;

public mysinglelinkedlmpl()

public boolean hascycle()

}return false;

}}

4.鍊錶的回文結構。

public class mysinglelinkedlmpl 

private int data;

public node next;

public node(int data)

}//節點類

private node head;

public mysinglelinkedlmpl()

public boolean chkpalindrome()

//slow指向的位置就是中間位置

node p=slow.next;

node pnext=p.next;

while (p!=null)

}//後半部分已經進行反轉

while (this.head!=slow)

if(this.head.next==slow)

head=head.next;

slow=slow.next;

}return true;

}}

5.在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭

指標。

public class mysinglelinkedlmpl 

private int data;

public node next;

public node(int data)

}//節點類

private node head;

public mysinglelinkedlmpl()

public node deleteduplication()

cur=cur.next;

//cur指向的這個節點和前面的節點不同

tmphead.next=cur;

}else

}return node.next;

}}

鏈表面試題(一)

1.刪除無頭鍊錶的非尾結點。解題思路 因為不知道pos的前乙個結點,所以只能刪除pos的後乙個結點。首先,把pos下乙個結點的data賦值給pos的data,然後把pos和pos的下下乙個結點連線,最後刪除pos的下乙個結點。剛開始的鍊錶如下圖所示 經分析後得到的圖如下 如下 void erasen...

鏈表面試題

不改變鍊錶結構,從尾到頭列印單鏈表 遞迴實現 void printlistrevers recursively plist phead printf d phead data 當鍊表非常長的時候,遞迴實現的會導致函式呼叫層級很深,可能導致呼叫棧溢位。用棧不會出現此類情況,顯然用棧實現 的魯棒性會好一...

鏈表面試題

從尾到頭列印單鏈表 棧 遞迴 從尾到頭列印鍊錶 includevoid printtailtohead listnode head while s.empty 空間複雜度o n void printtailtoheadr listnode head cout data 刪除乙個無頭單鏈表的非尾結點 ...