判斷兩個鍊錶是否有交點
判斷兩個單鏈表是否相交,如果相交,給出相交的第乙個點(假設兩個鍊錶都不存在環)。相交的煉表示意圖如下所示。
兩個沒有環的鍊錶如果是相交於某一結點,如上圖所示,這個結點後面都是共有的。所以如果兩個鍊錶相交,那麼兩個鍊錶的尾結點的位址也是一樣的。程式實現時分別遍歷兩個單鏈表,直到尾結點。判斷尾結點位址是否相等即可。時間複雜度為o(l1+l2)。
如何找到第乙個相交結點?判斷是否相交的時候,記錄下兩個鍊錶的長度,算出長度差len,接著先讓較長的鍊錶遍歷len個長度,然後兩個鍊錶同時遍歷,判斷是否相等,如果相等,就是第乙個相交的結點。
void is_2list_intersect(linklist l1, linklist l2)
linklist p = l1;
linklist q = l2;
int l1_length = 0;
int l2_length = 0;
int len = 0;
while (p->next)
while (q->next)
printf("p: = %d\n", p);
printf("q: = %d\n", q);
printf("l1_length: = %d\n", l1_length);
printf("l2_length: = %d\n", l2_length);
if (p == q)
else
while (len)
while (p != q)
printf("相交的第乙個結點是:%d\n", p->data );
}else
}
2.乙個鍊錶中包含環,請找出該鍊錶的環的入口結 鍊錶的一些基本操作
include include typedef struct list elem,pelem typedef struct real list,plist void initialize plist mylist 初始化 int creat plist mylist1 建立鍊錶 else print...
單向鍊錶的一些操作
writed by caolichen include include 定義單鏈表節點型別 typedef struct lnode slink 初始化線性表,即將表頭結點的表頭指標指向為空 null slink initlink slink head 建立線性表,輸入n個int型變數 void c...
關於鍊錶的一些操作總結
這是乙個簡單的鍊錶操作問題,在leetcode上面有52.7 的通過率,難度是簡單。但是還是想在這裡基於python做一下總結,順便總結一下鍊錶的各種操作。首先先看一下leetcode上面的題目 反轉乙個單鏈表。示例 輸入 1 2 3 4 5 null 輸出 5 4 3 2 1 null 高階 你可...