LeetCoding--Reverse Linked List(Java)

翻转单链表(要注意的是是否含有头结点):

思路一:每次将第一个节点后的那个节点放到第一个位置。若无头结点,则额外需要一个指针记录首节点。

代码:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public ListNode reverseList(ListNode head) {
        if(head == null)
              return null;
        if(head.next == null)
              return head;
        ListNode h = head;
        while(head.next!=null){
            ListNode p = head.next;
            head.next = p.next;
            p.next = h;
            h = p;
        }
        return h;
    }
}

思路二:额外创建新的空间,用一个指针遍历原来链表,每次将新建的节点插入到新链表的开始位置,代码:

      public static ListNode reverseList1(ListNode head) {
            //每次都是将第一个节点后面的节点放到头结点后面
          if(head == null)
              return null;
          if(head.next==null)
              return head;

          ListNode h = new ListNode(head.val);

          while(head.next!=null){
              ListNode t = new ListNode(head.val);
              t.next = h;
              head = head.next;
          }
          return h;
        }

若有头结点:

思路一:

      public static ListNode reverseList(ListNode head) {
            //每次都是将第一个节点后面的节点放到头结点后面
          if(head == null)
              return null;
          ListNode p = head.next;
          while(p.next!=null){
              ListNode q = p.next;
              p.next = q.next;
              q.next = head.next;
              head.next = q;
          }
            return head;
        }

思路二:

      public static ListNode reverseList1(ListNode head) {
            //每次都是将第一个节点后面的节点放到头结点后面
          if(head == null)
              return null;
          if(head.next==null)
              return head;

          ListNode h = new ListNode(-1);
          h.next=null;
          ListNode p = head.next;
          while(p!=null){
              ListNode t = new ListNode(p.val);
              t.next = h.next;
              h.next = t;
              p = p.next;
          }
          return h;
        }
时间: 2024-11-07 15:04:17

LeetCoding--Reverse Linked List(Java)的相关文章

leetcode_206题——Reverse Linked List(链表)

Reverse Linked List Total Accepted: 1726 Total Submissions: 4378My Submissions Question Solution Reverse a singly linked list. click to show more hints. Hide Tags Linked List Have you met this question in a real interview? Yes No Discuss 这道题比较简单,主要是给

206. Reverse Linked List(LeetCode)

Reverse a singly linked list. /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* reverseList(ListNode* head) { ListNode * pre=

【leetcode】Reverse Linked List(easy)

Reverse a singly linked list. 思路:没啥好说的.秒... ListNode* reverseList(ListNode* head) { ListNode * rList = NULL, * tmp = NULL; while(head != NULL) { tmp = rList; rList = head; head = head->next; rList->next = tmp; } return rList; }

206. Reverse Linked List (LL)

熟悉了一下linkedlist的构造和处理 1 class Solution { 2 public ListNode reverseList(ListNode head) { 3 if(head == null) return head; 4 if(head.next == null) return head; 5 6 ListNode a = head; 7 ListNode b = head.next; 8 ListNode c = a; 9 head.next = null; 10 whi

leetcode:142. Linked List Cycle II(Java)解答

转载请注明出处:z_zhaojun的博客 原文地址:http://blog.csdn.net/u012975705/article/details/50412899 题目地址:https://leetcode.com/problems/linked-list-cycle-ii/ Linked List Cycle II Given a linked list, return the node where the cycle begins. If there is no cycle, return

【leetcode】:Evaluate Reverse Polish Notation (python)

逆波兰式的求解,建立一个类栈容器,遍历给定的逆波兰表达式,遇到数字就push, 遇到操作符就进行出栈,连续出两次,因为给定的四则运算符都是双目的,这里注意下这两个操作数的先后顺序,因为对于加法和乘法没关系,但是对于减法和除法是有先后关系的.然后进行相应的运算,将结果push进栈中. 这里附带说明下python中进行除法运算与c,java系列中的除法的不同,就是向下取整的问题.这种不同表现在两个操作数符号不同时的情况. 在c 中 3 / -5 = 0,但是在python中, 结果却为 - 1.这种

leetcode:82. Remove Duplicates from Sorted List II(Java)解答

转载请注明出处:z_zhaojun的博客 原文地址:http://blog.csdn.net/u012975705/article/details/50411033 题目地址:https://leetcode.com/problems/remove-duplicates-from-sorted-list-ii/ Remove Duplicates from Sorted List II Given a sorted linked list, delete all nodes that have

排列的学习(java)

1.无重复排列 2.有重复排列 3,下一个排列 package 生成排列; public class Main { static int count=0; //a中保存原来的排列,lev表示选定第几个数,len是长度 public static void swap(int a[],int lev,int i) { int temp=a[lev]; a[lev]=a[i]; a[i]=temp; } public static void swap(char a[],int lev,int i) {

杨玲 徐思 《面向对象程序设计(java)》第十一周学习总结

<面向对象程序设计(java)>第十一周学习总结 第一部分:理论知识学习部分 1.一般将数据结构分为两大类:线性数据结构和非线性数据结构.线性数据结构:线性表.栈.队列.串.数组和文件.非线性数据结构:树和图.2.线性表按其存储结构可分为顺序表和链表:用顺序存储结构存储的线性表称为顺序表:顺序表将线性表中的数据元素依次存放在某个存储区域中.一维数组就是用顺序方式存储的线性表.用链式存储结构存储的线性表称为链表.3.栈(Stack)也是一种特殊的线性表,是一种后进先出 (LIFO)的结构.栈是限