这道题也是使用了dummyhead的方法,在创建dummyhead之后,其实就是理清楚链接的顺序是什么,用数字来代表的话,如果dummyhead是0,链接完的顺序就是D213
在链接完2之后就会丢失1的信息 所以要把1保存下来
又因为2本身是链接3的 但是调整位置后也会丢掉3的信息 所以也要存3的信息
之后就是按顺序链接起来就可以了 ,一个循环结束后把D的位置放到1这个位置也就是D345再重复上述的流程,直到D后面的节点都是NULL后为止
另外再返回时要返回这个链表的head,刚刚所有的操作都是在这个链表上的操作。
这道题由于是删除第个节点,其实就是把倒数第n-1个节点和第n+1个节点连接起来
于是在使用快慢指针的时候,快指针先走N+1步之后,快慢指针距离相差N+1
之后快慢指针一起向后走
当快指针到结尾时,满指针就刚刚好到第n-1的位置 这是后链接n+1就成功删掉了倒数第n个节点
之后再返回这个链表就可以
这道题逻辑很简单。
链表相交,首先要看两个链表的长度差。
较长的那个链表先走多出来的步数
之后只要两个链表的一起走直到值相等时就返回
环形列表的代码部分很简单,但是数学逻辑比较需要思考。
首先快慢指针,慢指针一次走1,快指针一次走2;
所以快指针是一定会比满指针先进入环的,当慢指针和快指针相遇时
快指针已经在圈中走了很多圈了
慢指针的路程 : x (入环前)+ y(入环相遇点)
快指针的路程 : x (入环前)+y (入环相遇点)+ n(圈数)(y+z(相遇点到环形入口)
y + z就是一个圈的长度
所以 慢指针的路程 * 2 = 快指针的路程
通过简单的数学运算可以发现 当圈数时1时 x = z
从头结点出发一个指针,从相遇节点 也出发一个指针,这两个指针每次只走一个节点, 那么当这两个指针相遇的时候就是 环形入口的节点