程序员是怎么学习算法的?

科技网编2023-03-06 19:422500

把自己变笨,要进入计算机的世界,每次只能进行一步计算。最难的算法都是需要迭代理解,比如链表逆转,如果空间足够大,可以把所有链条断开并且都保存起来,用递归:头部的指针直接给临时指针,临时指针变头部指针继续循环,直到找到尾部的指针,然后头尾交换,完成转换。

public Node reverseList(Node node) {

if(node.next == null) {//当最后一个节点的时候返回return node;

Node temp = node.next;//得到当前节点的下一个节点

Node returnNode = reverseList(temp);

temp.next = node;//下一个节点的下一个节点为当前节点实现逆转

node.next = null;//实现逆转前链表的头结点为为节点

return returnNode;//返回逆转后的链表的头节点

如果没有大空间,就需要头指针自己迭代,保存头部的指针,头部的指针变头头部指针(第一次为尾部空),头头部指针变头指针,头指针变头部指针,这一轮结束,下轮开始,直到末尾。

public Node reverseList2(Node node) {

Node frontNode = null;//头结点逆转的时候前一个节点为null

Node headNode = node;//当前节点为头节点

Node tempNode;//临时变量保存下一个节点while(headNode != null) {

tempNode = headNode.next;

headNode.next = frontNode;//实现逆转

frontNode = headNode;

headNode = tempNode;

return frontNode;

评论区