237 Delete Node in a Linked List
思路:单向链表,只给定要删除的节点。怎么删除这个节点。参考。例如要删除节点node。一般来说我们需要将node.preNode.next = node.next。但是现在没有node的上一个节点。代替方案是修改当前节点为node.next节点。
node.val = node.next.val;
node.next = node.next.next;
206 Reverse Linked List
思路:逆转LinkedList,也是单向的。每new一个节点,将当前节点设置为头节点,上一个节点设置为当前节点的next。
public ListNode reverseList(ListNode head) {
if(head==null) return null;
ListNode node = head;
ListNode newNode = new ListNode(node.val);
while(node.next!=null){
node = node.next;
ListNode newHead = new ListNode(node.val);
newHead.next = newNode;
newNode = newHead;
}
return newNode;
}
学习:不创建新的node,修改原节点的next为上一个节点。参考链接。
21. Merge Two Sorted Lists
思路:有些题你知道该怎么做,就是不会写代码。
代码
234. Palindrome Linked List
学习:这道题目的思路是比较简单的。对于单向列表的难点,往往就是就是如何找到一个节点的上一个节点。这个根据不同要求解决方法不同。
本题思路是1 查找到LinkedList的一半;2 把后一部分逆转;3 比较两部分是否相同。这里的细节就是注意当list长度为奇数的时候。
1 查找到LinkedList的一半,使用快慢指针;
2 把后一部分逆转:在前面做过;
3 比较相同,就简单了。
代码