劍指offer 划水鍊錶2

2021-10-06 09:32:12 字數 1699 閱讀 4590

(1)兩個鍊錶的第乙個公共結點

位元組跳動的hr人真的很好  和藹可親  就像傅姓洲洲學長一樣  人超好  給我出的題很簡單,,可惜我  面位元組一點沒準備  怕是一年多沒寫**  我連這個都沒寫出來  我人傻了  我是飛舞

首先是比較常規的寫法.我們維護乙個map,然後遍歷一下這倆鍊錶 ,找見相同的就返回好咯.

/*

struct listnode

};*/

class solution

else

phead1=phead1->next;

}if(phead2)

else

phead2=phead2->next;}}

return null;

}};

然後hr小哥又問   你能不能別靠map   ,我說  我行!當我不行的時候我就站到行人道上   這樣我就變成了行人

/*

struct listnode

};*/

class solution

return p1;

}};

(2)鍊錶中環的入口節點....捂臉.我第一次面試的時候,劍指刷的只剩了這個題,然後他就考了......有時候就是這麼點背.......但是主要還是怪自己菜   真的飛舞

首先是比較好想的辦法.寫乙個map,然後往裡存節點.掃一遍就能找到如果有環.環的開始節點.

/*

struct listnode

};*/

class solution

return null;

}};

這時候...我不等你說了  不用map是吧?

那可以迴圈.找有沒有環,找環的長度,然後快慢指標直接求環的開始節點.

/*

struct listnode

};*/

class solution

if(p1==null||p2==null)return null;

int len=1;

p1=p1->next;

while(p1!=p2)

p1=p2=phead;

while(len--)

while(p1&&p2&&p1!=p2)

return p1;

}};

(3)刪除列表中重複的節點

注意審題,,不是保留乙個 ,,是重複的都刪掉.

/*

struct listnode

};*/

class solution

p=p->next;

last->next=p;

}else

}return ans->next;

}};

這裡寫來寫去到處越界,索性不要考慮**需不需要寫判空的條件,直接都寫上就老了.因為有可能這個鍊錶就是乙個222這種 所以先整乙個新的頭結點指向煉表頭,再做刪重的操作.

看見題解裡有遞迴寫法...我總感覺這題寫遞迴更難想........咱也貼乙個遞迴的寫法好了.

/*

struct listnode

};*/

class solution

else

return phead;

}};

劍指offer 鍊錶

單向鍊錶的結構定義 typedef int datatype struct listnode 問題1 往鍊錶的末尾新增乙個結點 給定頭結點,往末尾插入乙個結點 void insertnode listnode head,datatype key listnode p head while p nex...

劍指offer 鍊錶

鍊錶 鍊錶是一種動態資料結構 struct listnode 往鍊錶的末尾新增乙個節點的c 程式如下 void addtotail listnode phead,int value 注意第乙個引數phead是乙個指向指標的指標。當我們往乙個空鍊錶插入乙個結點時,else pnode m pnext ...

劍指offer 鍊錶

在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。思路1 遞迴版 class solution 找到當前節點與下乙個節點不重複的點,從不重複的點開始遞迴 return deleteduplication phead next else 思路2 非遞迴版 ...