3-6(链表相关算法)

今天主要完成了链表的5道算法题,不得不说leedcode和牛客网真是个好东西,点个赞。
1、反转链表,如1->2->3->4->NULL,反过来打印。
思想:
第一种可以利用单链表的头插法来实现,定义一个新节点newnode,依次将1、2、3、4插到newnode,但是插完之后需要将newnode重新赋值到第一个节点。
第二种来利用迭代思想,定义n1,n2,n3分别为NULL,头节点head,头结点的下一位head->next,n2->next=n1;ni=n2;n2=n3;这样可以将链表指针反向指过来。
2、移除单链表中为val的值
思想:定义2个节点,一个为cur,一个为prev,利用pprev->next=cur->next,来删除cur的节点,思想很简单,但是需要注意:当删除的元素为第一个值和指针的移动
3、求链表的中间节点:
思想:利用快慢指针,快指针一次移动2个位置,慢指针一次移动一个位置,这样当快指针为空或者fast->next为空时,慢指针刚好为中间位置。需要注意一下 链表长度为奇数和偶数时,其快指针的空形式不一样。
4、合并2个有序链表
思想:定义2个指针,和一个新的newnode,首先比较一下2个链表的第一个元素谁比较小,把小的做头,剩下的依次比较,把小的依次插到newnode后面,尾插法。
5、输出一个链表的倒数第k个元素
思想:还是可以利用快慢指针的思想,但是选哟注意一点k的值不能大于链表的长度,否则输出NULL。快指针提前移动k个位置,然后快慢指针再一起移动,当快指针到达NULL时,慢指针刚好到达倒数第k个位置,因为快指针比慢指针多走了k个位置。

上一篇:ArrayList和LinkedList源码分析


下一篇:单链表