首页 > 其他分享 >[leetcode]第 2 天 链表(简单)

[leetcode]第 2 天 链表(简单)

时间:2022-12-19 17:55:46浏览次数:57  
标签:pre head ListNode cur int 链表 简单 leetcode

06. 从尾到头打印链表

思路

说到从尾到头,很容易想到可以用到栈的方式进行处理,那么问题就转化成了如何用辅助栈完成打印链表。可以从链表的头节点开始,依次将每个节点压入栈内,然后依次弹出栈内的元素并存储到数组中。使用到LinkedList的addLast()和removeLast()。

在题目里有一个ListNode对象,ListNode是做什么用的?

public class ListNode{
    int val;
    ListNode next;        //链表指向的下一个值的指针
    ListNode(int x){val = x;}   //这个方式赋值
}
class Solution {
    public int[] reversePrint(ListNode head) {
        LinkedList<Integer> stack = new LinkedList<Integer>();
        while(head != null){
            stack.addLast(head.val);
            head = head.next;
        }
        int[] a = new int[stack.size()];
        for(int i = 0; i < a.length; i++){
            a[i] = stack.removeLast();
        }
        return a;
    }
}

24. 反转链表

思路

一看到反转就想用栈,但是实际上这道题的思路不是这样的。
反转链表的思路是更改指针的方向,流程是:

  1. 保存下一节点
  2. 修改指针方向
  3. 保存当前节点
  4. 处理下一节点
class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode cur = head, pre = null;
        while(cur != null) {
            ListNode tmp = cur.next;
            cur.next = pre;
            pre = cur;
            cur = tmp;
        }
        return pre;
    }
}

35. 复杂链表的复制

思路

标签:pre,head,ListNode,cur,int,链表,简单,leetcode
From: https://www.cnblogs.com/vincy9501/p/16992751.html

相关文章