[cc150] check palindrome of a singly linked list

Problem: Implement a function to check if a singly linked list is a palindrome.

思路:

最简单的方法是 Reverse and compare.

另外一种非常经典的办法是用 Recursive 的思路,把一个list看成这种形式:

0 ( 1 ( 2 ( 3 ) 2 ) 1 ) 0

0 ( 1 ( 2 ( 3 3 ) 2 ) 1 ) 0

CC150里面给出的Code,非常简洁,贴在下面:

length == 1 对应上面第一种情况

length == 2 对应上面第二种情况

其中用到了一个Wrapper class ‘Result‘, 因为Java不支持返回值传两个变量。

class Result{
  LinkedListNodde node;
  boolean result;
}

[cc150] check palindrome of a singly linked list

时间: 2024-10-11 11:08:22

[cc150] check palindrome of a singly linked list的相关文章

Singly Linked List

Singly linked list storage structure:typedef struct Node{ ElemType data; struct Node *next;}Node; typedef struct Node *LinkList; LinkedList without head node: LinkedList with head node: Operations: /*check the size of link list.*/int ListLength(LinkL

To find the kth to Last Element of a Singly Linked List

To find the kth to Last Element of a Singly Linked List To find the kth to Last Element of a Singly Linked List Web Link Description Code - C Tips Web Link None Description Write a pro-gram to find the kth to Last Ele-ment of a Singly Linked List For

待字闺中之快排(QuickSort)单向链表(Singly Linked List)

题目来源,待字闺中,原创@陈利人 ,欢迎大家继续关注微信公众账号"待字闺中" 分析:思路和数据的快速排序一样,都需要找到一个pivot元素.或者节点.然后将数组或者单向链表划分为两个部分,然后递归分别快排. 针对数组进行快排的时候,交换交换不同位置的数值,在分而治之完成之后,数据就是排序好的.那么单向链表是什么样的情况呢?除了交换节点值之外,是否有其他更好的方法呢?可以修改指针,不进行数值交换.这可以获取更高的效率. 在修改指针的过程中,会产生新的头指针以及尾指针,要记录下来.在par

LeetCode 206 Reverse a singly linked list.

Reverse a singly linked list. Hint: A linked list can be reversed either iteratively or recursively. Could you implement both? 递归的办法: /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { v

Convert Sorted List to Binary Search Tree -- leetcodeGiven a singly linked list where elements are s

Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST. 基本思路: 中序遍历的过程,与有序链表的顺序是一一对应的. 采用中序遍历构造进树的构造. 并利用取值范围,确定,根的位置,以及子树的范围. 故需要遍历整个链表,求得总的长度. 链表长度的一半,即为根结点所在位置. 左边则为左子树的取值范围,右边即为右子树的取值范围. 同上,递归应

Linked List {singly linked list -> doubly linked list -> circular linked list}

Linked List 单向链表 Singly linked list /********************************************************* Code writer : EOF Code file : single_linked_list.c Code date : 2015.01.15 e-mail : [email protected] Code description: Here is a implementation for singly

单链表反转(Singly Linked Lists in Java)

单链表反转(Singly Linked Lists in Java) 博客分类: 数据结构及算法 Java代码   package dsa.linkedlist; public class Node<E>{ E data; Node<E> next; } Java代码   package dsa.linkedlist; public class ReverseLinkedListRecursively { public static void main(String args[])

Reverse a singly linked list

Reverse a singly linked list. 1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode(int x) : val(x), next(NULL) {} 7 * }; 8 */ 9 class Solution { 10 public: 11 ListNode* reverseList(ListNode*

Python实现单向有序链表(Singly linked list)

概念介绍 上一博文已经介绍了Python实现单向无序链表的实现方式,这篇博文来介绍Python如何实现单向有序链表.有序和无序仅仅指节点所包含的数据成员的大小排列顺序,有序指各个节点按照节点数据成员的大小顺序排序,从大到小或从小到大.无序则可以任意排列. 链表节点实现 实现方式完全同单向无序列表,这里不再过多介绍,感兴趣的可以看Python实现单向无序链表(Singly linked list)关于节点的实现方式. 链表实现 链表的实现中,链表初始化,判断是否为空,获取链表长度与无序链表一致.同