鍊錶所有的相關操作(合併,查詢,逆制,判環,相交)

2021-08-04 02:24:52 字數 3473 閱讀 5478

1.合併兩個有序鍊錶,合併以後的鍊錶依舊有序。

#pragma once

typedef struct listnode

node;

void display(node* head) //非遞迴列印

cout << endl;

}node* meagelist(node* l1, node* l2) //合併鍊錶

if (null == l2)

if (l1->_data < l2->_data) //吧頭資料小的乙個作為新鍊錶的頭

else

node* newlist = newnode;

while (cur1 && cur2) //把剩餘鍊錶連線在後面

else

}if (cur1 == null)

else

newnode->_next = cur1;

return newlist;

}node* meagelistre(node* l1, node* l2) // 遞迴合併

if (null == l2)

if (l1->_data < l2->_data)

else

}

2.逆置/反轉單鏈表,查詢單鏈表的倒數第k個節點,要求只能遍歷一次鍊錶 。

typedef struct listnode       //鍊錶節點

node;

node* revercelist(node* list) //逆制單鏈表 (取下乙個節點,頭插)

node* head = list->_next;

node* newhead = list; //原鍊錶的頭節點,變成新鍊錶的尾節點。

node* cur = list->_next;

newhead->_next = null;

while (cur)

return head;

}node* refind(node* list, int k) //查詢倒數第k個節點, (兩指標 相差k-1步)

node* ptr1 = list;

node* ptr2 = list;

while (k--)

while (ptr1&&ptr2)

return ptr2;

}

3.判斷鍊錶是否帶環?若帶環求環的長度?若帶環求環的入口點?

typedef struct listnode    //鍊錶節點

node;

node* find(node* list, int key) //查詢某個節點

node = node->_next;

} return null;

}node* makering(node* list) // 構建帶環鍊錶

newnode->_next = ret;

return newhead;

}bool judgering(node* list) //判斷鍊錶是否帶環

return false;

}node* findringnode(node* list) //找鍊錶環的入口點

if (fast && fast->_next)

else

return null;

// 若帶環 ,slow從頭開始走,fast從相遇點開始走,第一次相遇即為交點

while (slow != fast)

return slow;

}int ringlong(node* list) //求環的長度

return count;

}

4.判斷兩個鍊錶是否相交,若相交,求交點。(假設鍊錶不帶環)。判斷兩個鍊錶是否相交,若相交,求交點。(假設鍊錶可能帶環)

typedef struct listnode

node;

node* find(node* list, int key) //查詢結點

node = node->_next;

} return null;

}node* makering(node* list) //建造帶環鍊錶

node->_next = find(list, 1);

return list;

}void makecrosslist(node* list1, node* list2) //建造相交鍊錶

node2->_next = find(list1, 3);

}bool judgering(node* list) //判斷鍊錶是否帶環

return false;

}node* findringnode(node* list) //找帶環鍊錶的入口點

if (fast && fast->_next)

else

return null;

// 若帶環 ,slow從頭開始走,fast從相遇點開始走,第一次相遇即為交點

while (slow != fast)

return slow;

}int ringlong(node* list) //求環的長度

return count;

}node* judgecross1(node* list1, node* list2) //不帶環相交的判斷

head2->_next = head1; //讓 list1 的頭鏈上 list2 的結尾

//判斷新鍊錶是否帶環

//若新鍊錶帶環,則環的入口點就是第乙個相交的點

return findringnode(list2);

}int getlistlength(node* list) //求鍊錶長度

len = len + ringlong(list); //鍊錶長 = 頭結點到環入口的長度 + 環的長度

break;

} else //不帶環鍊錶的長

}return len;

}node* judgecross2(node* list1, node* list2) //鍊錶帶環相交

else

if (judgering(list1) && judgering(list2)) //若相交,兩條鍊錶必然都帶環

if (head2 == findringnode(list1)) //若相交,list1 環上的點(入口點),必在 list2 上

if (head1 == findringnode(list1)) //2.環上相交(環有兩個入口點),環的任意乙個入口點就是交點

return findringnode(list1);

} else

return null;

} return null;

}

Mysql查詢所有的表名和查詢表中所有的欄位名

最近的乙個專案中用到兩個東西,乙個就是傳入資料庫連線就自動複製該庫的所有表結構,其二就是在搜尋中用到獲取庫中的表和表中的字段,所以記錄一下,至於專案情況,隨後更新。獲取所有資料庫名稱 獲取庫中的所有表名稱 select column name from information schema.colu...

oracle 查詢表空間所有表 及表所有的表空間

查詢表空間所有表 select table name from all tables where tablespace name 表空間 表空間名字一定要大寫。查詢表所在的表空間 select from user tables where table name 表名 表名一定要大寫 建立表空間 cr...

查詢資料庫中所有的表

select from sysobjects where xtype u 查詢當前資料庫下所有使用者建立的表 xtype char 2 物件型別。可以是下列物件型別中的一種 c check 約束 d 預設值或 default 約束 f foreign key 約束 l 日誌 fn 標量函式 if 內...