LeetCode--Reverse Linked List(Java)

本文详细介绍了翻转单链表的两种方法,包括不带头结点和带头结点的情况,提供了完整的代码实现。

相似题目:

Palindrome Number

Valid PalinDrome

Reverse Linked List

  Palindrome Linked List

 

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

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

代码:

/**
 * 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;
        }

 

转载于:https://www.cnblogs.com/little-YTMM/p/4503725.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值