lintcode 32 翻转链表

image.png
  • 思路


    image.png

    每次遍历的节点拿到最前面,作为新的head节点。

head=p.next

那么2节点的next地址不能丢了。
p.next=head.next
然后考虑2的后面是谁?
head.next=q
如果没有这个q,head.next=p。第三个节点出现的时候,就会把中间的丢了。因为每次新出来的节点要连接上次出来的点。需要有个引用指向它。p指向顺序遍历的尾节点。head是每次出来的那个点。q用来指向head需要连接到的点

/**
 * Definition for ListNode.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int val) {
 *         this.val = val;
 *         this.next = null;
 *     }
 * }
 */ 
public class Solution {
    /**
     * @param head: The head of linked list.
     * @return: The new head of reversed linked list.
     */
    public ListNode reverse(ListNode head) {
        if(head==null||head.next==null){
            return head;
        }
        ListNode p = head;
       ListNode q = head;
        while(p.next!= null){
           head=p.next;
           p.next=head.next;
           head.next=q;
           q=head;           
        }
        return head;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 翻转一个链表 样例:给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null
    jose_dl阅读 1,092评论 0 0
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,351评论 0 33
  • include<iostream> using namespace std; //单链表 typedef stru...
    jmychou阅读 3,251评论 0 0
  • //leetcode中还有花样链表题,这里几个例子,冰山一角 求单链表中结点的个数----时间复杂度O(n)这是最...
    暗黑破坏球嘿哈阅读 5,419评论 0 6
  • 大家好,这次不是我的作品,是转载著名的厦门大学教授易中天的一段话!觉得说的很实在,所以分享! 再过若干年,...
    石榴slr阅读 1,917评论 0 1