有关链表的理解:
初始化时head表示第一个节点:head->next表示第二个结点,head->val表示第一个节点的值,head->next->val表示第二个节点的值
head,head->next都是指针型数据
题目一:判断是否为环形链表
思路:沿着链表进行遍历,将遍历元素存入哈希表,并且判断哈希表中该元素是否存在即可:
class Solution {
public:
bool hasCycle(ListNode *head) {
//哈希表
unordered_set<ListNode*> has;
while(head!=nullptr){
if(has.count(head)==1)return true;
has.insert(head);
head=head->next;
}
return false;
}
};
题目二:将两个升序链表进行合并
思路:采用递归的算法,注意空链表的情况。
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
//递归
if(l1==nullptr)return l2;
if(l2==nullptr)return l1;
if(l1->val<=l2->val){
l1->next=mergeTwoLists(l1->n