单链表方法:
1、双指针法
用两个指针对链表进行操作
判断是否有环、求倒数第k位的数、求中间节点、求环的起始点、求两个链表是否有公共部分(相交)等
while (slow && fast && fast->next) {
slow = slow->next;
fast = fast->next->next;
if (slow == fast) {
return true;
}
}
2、虚拟头指针
设一个指针指向链表头节点,用于链表自身发生变化的问题
3、反转链表
回文链表、反转链表
ListNode* reverseList(ListNode* head) {
ListNode *pre=NULL,*cur = head,*next=NULL;
while(cur){
next = cur->next;
cur->next = pre;
pre = cur;
cur = next;
}
return pre;
}
4、存入数组、stack、map、queue来进行操作。
5、链表的一些操作通过递归进行更加简洁明了。