我们针对链表中最经典的几道算法题做讲解:
1.求两个链表的公共节点.
2.判断链表是否有环.
3.给定一个链表,判断是否有环,有返回入环的第一个节点,无返回空.(在第二题上的加强版).
4.给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的深度拷贝.
5.对链表进行插入排序.
6.在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针.
一.详细讲解
1.求两个链表的公共节点.(如图)
typedef struct ListNode node;
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
node* cur1=headA;
node* cur2=headB;
int sum1=0;
int sum2=0;
int before=0;
while(cur1->next){//判断第一个节点的长度,并走到最后一个节点
cur1=cur1->next;
sum1++;
}
while(cur2->next){//判断第二个节点的长度,并走