160 相交链表
分别求出两个链表的长度,使用while()循环得到lenA和lenB
求出二者长度的插值gap,并将lenA为更大的值,如果本身不是,则调换lenA和lenB,curA和curB,这里需要用到swap函数
将curA移动到和curB的长度相同的位置,这里需要用到gap
遍历curA和curB,直到找到二者相同的位置,说明相交,否则遍历结束后,返回null
206 反转链表
这里需要新建两个节点cur,pre
ListNode* cur = head;
ListNode* pre = nullptr;
遍历cur,设置中间变量temp
while(cur){
ListNode* tmp = cur->next;
cur->next = pre;
pre = cur;
cur = tmp;
}
最后 return pre;
不返回cur的原因是,cur最后指向的是nullptr
234 回文链表
联想到回文数组
首先将链表转换为数组,这里需要新建一个数组res
遍历链表,将链表中的值放进链表
最后用判断回文数组的方法来判断
设置left = 0,right = res.size() - 1
只要res[left] != res[right] ,返回false
left++;
right--;
直到left <= right
141 环形链表
定义一个哈希链表unordered_set<ListNode*> seen;
遍历链表head,在seen里面能否找到head,能找到就说明闭环了return true
将head插入到 seen中
head = head->next